Symbol
▶Symbol()로 생성하며, 생성자 new를 사용하여 생성이 불가능하다.
// 틀린 방법
const newSym = new Symbol(); // TypeError: Symbol is not a constructor
// 옳은 방법
const symbol = Symbol('key');
▶ 변경 불가능한 원시 타입이며 중복되지 않는 고유한 값이다.
const symbol1 = Symbol('key');
const symbol2 = Symbol('key');
console.log(symbol1 === symbol2); // false
▶ 동일한 이름의 값을 사용하고 싶다면 Symbol.for()를 사용하면 된다.
const symbol1 = Symbol.for('key');
const symbol2 = Symbol.for('key');
console.log(symbol1 === symbol2); // true
▶ Symbol.for()로 생성한 값은 Global Symbol Registry(전역 심벌 레지스트리)에 저장되는데 이 장소에서 동일한 값을 재사용하게 된다. Symbol()로 생성한 값은 전역 심벌 레지스트리에 보관되지 않는다.
▶ Symbol의 값을 알고싶다면 Symbol.keyFor()을 사용하면 된다. 이 방법은 오직 전역 심벌 레지스트리에 보관되어 있는 값에만 사용할 수 있다.
// 심벌 레지스트리의 심벌
const symbol1 = Symbol.for('key');
console.log(Symbol.keyFor(symbol1)); // key
// 일반적인 심벌
const symbol2 = Symbol('key');
console.log(Symbol.keyFor(symbol2)); // undefined
'JaveScript' 카테고리의 다른 글
Optional Chaining Operator (0) | 2022.06.22 |
---|---|
논리연산자(&&, ||)의 단축평가 (0) | 2022.06.22 |
Spread & Rest (0) | 2022.06.20 |
Map (0) | 2022.06.20 |
Set (0) | 2022.06.16 |