다른 값과 중복되지 않고 변경 불가능한 원시 타입의 값
Symbol([description])
const mySymbol = Symbol();
충돌 위험이 없는 유일한 프로퍼티 키를 만들기 위해
사용합니다.Symbol("foo") === Symbol("foo"); // false
const mySymbol = Symbol();
console.log(mySymbol) // Symbol()
const mySymbol = new Symbol(); // <- 이게 될거같은데 안됩니다요.
const mySymbol = Symbol('ㅇㅅㅇ');
console.log(mySymbol.description) // 'ㅇㅅㅇ'
console.log(mySymbol.toString()) // 'Symbol(ㅇㅅㅇ)'
const mySymbol = Symbol();
console.log(mySymbol + ''); // typeError
console.log(+mySymbol); // typeError
console.log(!!mySymbol); // true
Symbol.for(key)
Symbol()
로 생성된 심벌 값은 전역 심벌 레지스트리에 등록되지 않습니다.const s1 = Symbol('a')
const s2 = Symbol.for('a')
const s3 = Symbol.for('a')
s1 === s2 // false
s2 === s3 // true
s1.description // 'a'
s2.description // 'a'
Symbol.keyFor(key)
const s1 = Symbol.for('mySymbol')
Symbol.keyFor(s1) // mySymbol
const Direction = {
UP: Symbol('up'),
DOWN: Symbol('down'),
LEFT: Symbol('left'),
RIGHT: Symbol('right')
}
Object.freeze()
랑 같이 쓰면 enum 처럼 쓰는것도 가능합니다.const Direction = Object.freeze({
UP: Symbol('up'),
DOWN: Symbol('down'),
LEFT: Symbol('left'),
RIGHT: Symbol('right')
})
const obj = {
[Symbol.for('mySymbol')]: 1
}
obj[Symbol.for('mySymbol')];
심벌값으로 프로퍼티 키를 만들면 ?for ... in
문, Object.key
, Object.getOwnPropertyNames
로 찾을 수 없습니다.Object.getOwnPropertySymbols
로 찾을 수 있습니다.Array.prototype[Symbol.for('decription')] = function () { ... }
이렇게 추가하면 다른 프로퍼티 키와 겹칠까봐 걱정 안해도 됩니다.참고 링크
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Symbol