Symbol
'유일한 식별자'를 만들고 싶을 때 사용한다.
사용법 : Symbol();
let temp = Symbol(); // 새로운 Symbol 만들기
let temp2 = Symbol('super'); // 'super'라는 설명을 붙인 Symbol temp2
'유일한 식별자' 를 만들고 싶을 때 사용한다는 것은 아래와 같은 것을 의미한다.
let o = Symbol('abc');
let t = Symbol('abc');
console.log(o === t); // false
Symbol을 통해서 얻으려고 한 것은 무엇일까?
'symbol'을 이용해 Hidden property 만들기
외부에서 데이터를 가지고 왔을 경우, 데이터 핸들링을 해줘야 하는 경우가 생길 때 Symbol을 사용해서 식별자를 추가할 수 있다.
let user = {
name: 'super'
}
let s = Symbol('id');
user[s] = 'test';
console.log(user[s]); // 'test';
외부에서 받아온 user데이터에 추가할 데이터가 생길 경우, 원본데이터는 그대로 두고 프로퍼티를 추가할 수 있는 방법이 될 수 있다.
여러가지 실험
let user = {
sample : 'babo'
}
let op = Symbol('ccc');
user[op] = 314
console.log(user[op]); // 314
user[Symbol()] = 'abc';
console.log(user); // {name:'babo', Symbol():314, Symbol():'abc'}
user[Symbol()] // <-- undefined가 뜬다.. 왜지? 그럼 어떻게 'abc'에 접근하지?
이때 user[op]
는 고유한 식별자로서 처리된다.
user.op
와 user[op]
는 다르다.
객체 생성을 리터럴로 사용해서 할 경우
let id = Symbol('id');
let user = {
name: 'super',
[id]:123,
id:1233
}
console.log(user); // {name:'super', Symbol(id):123, id:1233}
user.id // 1233
user[id] // 123
Symbol 유의점
for..in
반복문에서는 배제된다.Object.keys
를 사용해도 키가 심볼인 프로퍼티는 배제된다.