symbol
MDN 설명을 참고하면 심볼은 고유하고 수정 불가능한 데이터 타입이며 주로 객체 속성의 식별자로 사용한다고 합니다. https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Symbol
A symbol is a unique and immutable data type and may be used as an identifier for object properties.
그래서 이걸 어떻게 쓰는 건지는 잘 모르겠고요. ㅠㅠ 간단한 예제로 개념만 살펴봅니다.
if(true){
let a = Symbol('test');
console.log(typeof a == 'symbol'); //true
let b = Symbol('test');
console.log(a==b); //false
let c = Symbol.for('test');
let d = Symbol.for('test');
console.log(c==d); //true
let e = new Symbol(); //Uncaught TypeError: Symbol is not a constructor
}
Symbol(...)
은 매번 새로운 심볼을 생성합니다. 그렇기 때문에 a
와 b
를 비교하면 서로 같지 않다고 처리합니다. 대신 Symbol.for(...)
을 사용하는 경우에는 처음 새로운 심볼을 생성하고 두 번째 같은 key
값으로 생성된 심볼은 새로 만드는 것이 아니라 기존 심볼값을 가져와 사용한다고 합니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Symbol/for
ES6에서는 명시적 래퍼 객체를 만드는 것이 지원되지 않는다고 합니다. 다만 new Boolean
, new String
같은 것은 기존 레거시 지원때문에 사용할 수 있다고 하네요.
이건 뭐였지
예제는 기억나는데 어떤 설명이었는지 명확하지가 않네요. 일단 뭐 아래와 같은 식입니다. 나중에 생각나면 추가해보죠.
if(true){
let obj = {
['a']:3,
[[1,2,3]]:5
};
console.log(obj.a); //3
console.log(obj['1,2,3']); //5
}
if(true){
let c = Symbol();
let d = Symbol();
let obj = {
[c]:3,
[d]:5
};
console.log(obj[c]); //3
console.log(obj[d]); //5
}