생성자가 symbol은 원시값 을 반환하는 내장 객체
ES6에서 새로 추가된 원시 타입이며, 이 타입의 목적은 유니크한 식별자를 만들기 위해 사용
symbol은 유니크한 식별자를 위해 사용
값이 보이는 게 같더라도 내부에서는 다른 값을 가짐
const sym1 = Symbol();
const sym2 = Symbol();
const sym3 = Symbol("hi");
console.log(sym1 === sym2);
//false
console.log(sym3);
//Symbol(hi)
console.log(sym3.description);
//hi
let carA = {
id: 1,
name: "morning",
brand: "kia",
price: 1000,
};
const idSym = Symbol("id");
carA[idSym] = 300;
console.log(carA);
/*
{
id: 1,
name: 'morning',
brand: 'kia',
price: 1000,
[Symbol(id)]: 300
}
*/
Symbol은 for..in과 getOwnPropertyNames에서 제외됨
let carA = {
id: 1,
name: "morning",
brand: "kia",
price: 1000,
};
const idSym = Symbol("id");
carA[idSym] = 300;
console.log(Object.getOwnPropertyNames(carA));
//[ 'id', 'name', 'brand', 'price' ]
let carA = {
id: 1,
name: "morning",
brand: "kia",
price: 1000,
};
const idSym = Symbol("id");
carA[idSym] = 300;
for (const key in carA) {
console.log(key);
}
/*
id
name
brand
price
*/
Smbol.for()을 이용한 전역 심볼
Symbol.for()을 이용하면 같은 dscription을 가졌을 때 같은 값을 가짐
const sym1 = Symbol.for("sym1");
const sym2 = Symbol.for("sym1");
console.log(sym1 === sym2);
//true
symbol.keyFor()
symbol.for을 이요하여 전역 심볼을 만들 때 사용하는 description을 얻을 수 있게 함
const sym1 = Symbol.for("sym1");
const sym2 = Symbol.for("sym2");
console.log(Symbol.keyFor(sym1));//sym1
console.log(Symbol.keyFor(sym2));//sym2