
심벌 : ES6에서 도입된 7번째 데이터 타입으로 변경 불가능한 원시 타입의 값이다.
const mySymbol1 = Symbol();
const mySymbol2 = Symbol('mySymbol');
const mySymbol3 = Symbol('mySymbol');
console.log(mySymbol2 === mySymbol3) // false
Symbol.for 메서드는 인수로 전달받은 문자열을 키로 사용하여 키와 심벌 값의 쌍들이 저장되어 있는 전역 심벌 레지스토리에서 해당 키와 일치하는 심벌 값을 검색한다.
const mySymbol1 = Symbol.for('mySymbol');
const mySymbol2 = Symbol.for('mySymbol');
console.log(mySymbol2 === mySymbol3) // true
Symbol.keyFor 메서드를 사용하면 전역 심벌 레지스트리에 저장된 심벌 값의 키를 추출할 수 있다.
const mySymbol1 = Symbol.for('mySymbol');
Symbol.keyFor(mySymbol1); // mySymbol
const mySymbol2 = Symbol('foo');
Symbol.keyFor(mySymbol2); // undefined
const Direction = {
UP: Symbol('up'),
DOWN: Symbol('down'),
LEFT: Symbol('left'),
RIGHT: Symbol('right')
}
// 변수에 상수를 할당
const myDirection == Direction.UP.
if(myDirection === Direction.UP){
console.log('You ar going UP.')
}
const obj = {
[Symbol.for('a')]: 1
}
obj[Symbol.for('a')] // 1
심벌 값을 프로퍼티 키로 사용하여 프로퍼티를 생성하면 외부에 노출할 필요가 없는 프로퍼티를 은닉할 수 있다.
Object.getOwnPropertySymlols 메서드를 사용하면 심벌 값을 프로퍼티 키로 사용하여 생성한 프로퍼티를 찾을 수 있다.
const obj = {
[Symbol.for('a')]: 1
}
console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(a)]
const symbolKey1 = Object.getOwnPropertySymbols(obj)[0];
console.log(obj[symbolKey1]) // 1
자바스크립트가 기본 제공하는 빌트인 심벌 값을 ECMAScript 사양에서는 Well-known- Symol이라 부르고, 자바스크립트 엔진의 내부 알고리즘에 사용된다.
심벌은 중복되지 않는 상수 값을 생성하는 것은 물론 기존에 작성된 코드에 영향을 주지 않고 새로운 프로퍼티를 추가하기 위해, 즉 하위 호환성을 보장하기 위해 도입되었다.