본문 바로가기

Today I Learned

모던 자바스크립트 Deep Dive 11장 원시 값과 객체의 비교

🔑 키워드 정리

  • 값에 의한 전달 : 변수에 원시 값을 할당하면 실제 값이 저장된다. 정확히 말하면 메모리 주소를 전달한다.
  • 참조에 의한 전달 : 변수에 객체를 할당하면 참조 값이 저장된다.

🗒 내용 정리

  • const 키워드를 사용한 변수에 원시 값을 할당하면 변경할 없지만 객체를 할당하면 변경할 있다.
// 원시 값 할당
const a = 1;
a = 2; // 불가능

// 객체 할당
const o = {};
o.a = 1; // 가능

 

문자열

  • 문자열은 원시 타입이며, 변경 불가능하다. 문자열은 유사 배열 객체이면서 이터러블이다. (for 문으로 순회 접근할 있다.)
  • 원시 값을 복사하면 다른 메모리 공간에 저장된다. 별개의 값이 되는 것이다. 한쪽에서 재할당을 해서 값을 변경하더라도 서로 간섭할 없다.

 

객체

  • 객체는 프로퍼티의 개수가 정해져 있지 않으며, 동적으로 추가되고 삭제할 있다. 프로퍼티 값에도 제한이 없고 메모리 공간의 크기도 정해져있지 않다. 객체는 변경 가능한 값이다.
  • 객체를 복사하면 개의 식별자가 하나의 객체를 공유하게 된다. 한쪽에서 객체를 변경하면 서로 영향을 받는다.

얕은 복사와 깊은 복사

  • 얕은 복사는 참조 값을 복사하고 깊은 복사는 원시 값처럼 복사본을 만든다. 중첩된 객체의 경우 전자는 단계까지만 복사하고 후자는 중첩된 객체까지 모두 복사하게 된다. 원시 값을 변수에 할당하는 것을 깊은 복사, 객체를 할당하는 것을 얕은 복사라고 하기도 한다.
const o = { x: { y: 1 } };

// 얕은 복사
const c1 = { ...o };
c1 === o; // false
c1.x === o.x; // true

// 깊은 복사
const c2 = Loddash.cloneDeep(o);
c2 === o; // false
c2.x === o.x; // false