Symbol

김형진·2024년 8월 17일
post-thumbnail

생성자가 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

0개의 댓글