본문 바로가기
JaveScript

Symbol

by 원더링 2022. 6. 21.

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