다른 값과 중복되지 않고 변경 불가능한 원시 타입의 값
Symbol([description])
const mySymbol = Symbol();충돌 위험이 없는 유일한 프로퍼티 키를 만들기 위해 사용합니다.Symbol("foo") === Symbol("foo"); // falseconst 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); // trueSymbol.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) // mySymbolconst 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