- '심벌'은 ES6에서 처음 선보인, 새로운 원시 값 타입이다.
- 심벌은 충돌 염려없이 객체 프로퍼티로 사용 가능한, 특별한 '유일 값'이다.
var mysym = Symbol( "my own symbol" );
mysym; // Symbol(my own symbol)
mysym.toString(); // "Symbol(my own symbol)"
typsof mysym; // "symbol"
var a = { };
a[mysym] = "foobar";
Object.getOwnPropertySymbols( a ); // [ Symbol(my own symbol) ]
var symTest = Symbol( "Test 1" );
var symTest2 = Symbol( "Test 1" );
symTest === symTest2; // false
- 심볼을 똑같이 선언해서 각각 변수에 담아도 둘은 서로 같지 않다.
- 심볼의 타입은
symbol
이다.- 심볼을
객체의 key
로 사용할 수 있다.- for in 문을 사용할 때 심볼로 만든 키는 접근 불가능하다.
const id = 'str'
let obj = {
[id]: 3,
id: 1,
key: 2
}
for( i in obj) {
console.log( i );
}
// str
// id
// key
for in 문을 사용하여 객체에 어떤 프로퍼티가 있는지 확인할 수 있다,
그런데 프로퍼티를 Symbol로 만들면 for in문에서 접근할 수 없다.
const id = Symbol('str');
let obj = {
[id]: 3,
id: 1,
key: 2
}
for( i in obj) {
console.log( i );
}
// id
// key
객체를 생성할 때 외부에서 접근하지 않았으면 하는 프로퍼티나 메서드 이름에 언더스코어(_)를 붙이는 경우가 보통인데, 언더스코어가 앞에 붙은 프로퍼티 명도 언젠가는 심벌에 의해 완전히 대체될 가능성이 높다.