Symbol은 몇 번은 들어보았지만, 사용할 기회도 없고 생소한 타입이기에, 기억하기 위해 작성한다.
Symbol Type?
Symbol 타입이란,
객체의 프로퍼티 키를 고유하게 설정함으로서
프로퍼티 키의 충돌을 방지하기 위해 사용한다.
얼핏 보면 무슨 소린가 싶지만, 결국 객체 내에서 유일한 식별자를 만들고 싶을 때 사용한다는 뜻이다.
const voidSymbol = Symbol(); // 변경 불가능한 원시값
const mySymbol = Symbol('conative');
console.log(voidSymbol); // Symbol()
console.log(mySymbol); // Symbol(conative)
console.log(typeof mySymbol); // symbol
Symbol은 생성자가 없다!
여기서 재미있는 점은, Symbol은 생성자가 없어 new를 사용할 수 없다는 것이다.
const voidSymbol = new Symbol(); // Error
// Number, String, Boolean 등 다른 원시 타입은 생성자가 있다.
const num = new Number(1);
const str = new String('a');
예제
const obj = {};
obj.name = 'conative';
// 겹치지 않기에 가능하다.
const symbol = Symbol('name');
obj[symbol] = 'contia';
console.log(obj); // {name: 'conative', Symbol(name): 'contia'}
console.log(obj.name); // conative
console.log(obj[symbol]); // contia
console.log(obj[Symbol('name')]); // undefined (위에 생성된 Symbol('name')과 다른 존재)