참조(Reference)
원시타입
모든 값은 변경 불가능한 값 (immutable value), 이런 성질을 불변성(immutability)이라고 함
- Boolean
- Number
- String
- Null
- Undefined
- Symbol
참조 타입
객체가 컴퓨터 메모리 상에서 어디에 저장되었는지를 가리키는 값. 객체 자체의 내용을 변경할 수 있음. 따라서 객체는 가변(mutable)
- Object
객체의 가변성을 불변성으로 바꾸기
Object.freeze
객체를 얼려서 속성의 추가/변경/삭제를 막지만 중첩된 객체까지 얼리지 못함
const a = {prop:1};
Object.freeze(a);
// 모두 무시됨
a.prop = 2;
console.log(a); // {prop:1}
라이브러리
객체를 불면인 것처럼 다룰 수 있는 방법 제공, 내용이 달라지면 참조 역시 달라지게 되어 객체의 내용이 변경되었는지를 확인하는 작업이 아주 쉬워짐 링크.
역참조(dereference)
참조를 통해 메모리에 저장되어 있는 객체에 접근해서 해당 객체의 속성을 읽음
const obj = {prop: 1};
obj.prop; // `obj`를 통해 역참조된 객체의 속성을 읽음
래퍼 객체 (Wrapper Object)
원시 타입의 값은 객체가 아님에도 불구하고, 원시 타입에 점 표기법을 써서 메소드를 호출하거나 속성을 읽어올 수 있는데,
이는 JavaScript가 래퍼 객체(wrapper object)라는 기능을 제공.
- String
- Number
- Boolean
- Symbol