원시 값과 객체의 비교

이다은·2023년 3월 30일
0
post-thumbnail

원시 값

원시 값은 변경 불가능한 값이다. 여기서 주의할 점은 변경 불가하다는 것이 변수가 아니라 값이라는 점이다. 즉, 원시 값 자체를 변경할 수 없을 뿐 변수 값은 언제든지 재할당을 통해 변경할 수 있다.

특징

  • 불변성을 가지기 때문에 데이터의 신뢰성을 보장한다.
  • 변수에 새로운 원시 값을 재할당 하면 새로운 메모리 공간을 확보하고 재할당한 원시 값을 저장한 후, 변수는 새롭게 재할당한 원시 값을 가리킨다.
    이 때 변수가 참조하던 메모리 공간의 주소가 바뀐다.
  • 원시 값인 문자열은 유사 배열 객체이면서 이터러블이므로 배열과 유사하게 각 문자에 접근할 수 있다.
    문자열은 원시 값이므로 변경할 수 없다.
let str = 'string';

console.log(str[0]); // s
console.log(str.length); // 6

str[0] = 'S';

console.log(str); // string
  • 변수에 원시 값을 갖는 변수를 할당하면 할당 받는 변수에는 할당되는 변수의 원시 값이 복사되어 전달된다.
    이 때 할당받는 변수와 할당되는 변수는 다른 메모리 공간에 저장된 별개의 값이다.
let score = 80;
let copy = score;

console.log(score, copy); // 80 80
console.log(score === copy); // true

score = 100;

console.log(score, copy); // 100 80
console.log(score === copy); // false


객체

객체는 변경 가능한 값이다. 프로퍼티의 개수가 정해져 있지 않으며, 동적으로 추가되고 삭제할 수 있다.

특징

  • 변수를 통해 메모리 공간에 접근하면 참조 값에 접근할 수 있다.
    참조 값은 생성된 객체가 저장된 메모리 공간의 주소, 그 자체다.
  • 여러 개의 식별자가 하나의 객체를 공유할 수 있다.
    원본 또는 사본 중 어느 한쪽에서 객체를 변경하면 서로 영향을 주고받는다.
let person = {
  name: 'Lee'
};

let copy = person;

console.log(person === copy); // true

copy.name = 'Kim';
person.address = 'Seoul';

console.log(person); // {name: "Kim", address: "Seoul"}
console.log(copy); // {name: "Kim", address: "Seoul"}
  • 객체 리터럴은 평가될 때마다 객체를 생성하기 때문에 내용이 같은 객체를 각각의 변수에 할당하면 다른 메모리에 저장된 별개의 객체가 된다.
    이 때의 프로퍼티 값을 비교할 경우에는 true가 반환된다.
let person1 = {
  name: 'Lee'
};

let person2 = {
  name: 'Lee'
};

console.log(person1 === person2); // false
console.log(person1.name === person2.name); // true

🧐 해당 글은 책 모던 자바스크립트 deep dive를 참고하여 작성하였습니다.

profile
안녕하세요

0개의 댓글