symbol

장돌뱅이 ·2022년 3월 17일
0

JavaScript

목록 보기
39/46

symbol

유일한 식별자를 만들 때 사용한다. new를 붙이지 않는다.

const a = Symbol(); // new를 붙이지 않는다.
const b = Symbol();

console.log(a === b); //false
console.log(a == b); //false


//프로퍼티 key : 문자형
const obj = {
  1: "is 1",
  false: "거짓",
};

console.log(Object.keys(obj)); //['1', 'false']

console.log(obj["false"]); //거짓, 문자열로 접근 가능
console.log(obj[false]); //거짓


//프로퍼티 key : 심볼형
const id = Symbol("id");
const user = {
  name: "tom",
  age: 30,
  [id]: "my id",
};
console.log(user); //{name: 'tom', age: 30, Symbol(id): 'my id'}
console.log(user[id]); //my id 

console.log(Object.keys(user)); // ['name', 'age'] , 키가 심볼형인 프로퍼티는 건너뛴다. 
// 특정 객체의 원본데이터는 건들이지 않고 속성을 추가할 수 있다. 

심볼은 유일성이 보장된다.
심볼을 객체의 키로 사용하면 그 키는 숨겨진다. 특정 객체의 원본데이터는 건들이지 않고 속성을 추가할 수 있다.

symbol.for(): 전역심볼

심볼은 이름이 같더라도 모두 다른존재다.
그런데 가끔 전역변수처럼 이름이 같으면 같은 객체를 가리킬 필요가 있는데

  • 하나의 심볼만 보장받을 수 있다.
  • 없으면 만들고, 있으면 가져오기 때문이다
  • symbol 함수는 매번 다른 symbol 값을 생성하지만,
  • symbol.for 메소드는 하나를 생성한 뒤 키를 통해 같은 symbol을 공유한다.

const id1 = Symbol.for("id");
const id2 = Symbol.for("id");

console.log(id1 === id2); // true

Symbol.keyFor(id1) // "id"

Symbol.keyFor를 이용해 변수를 넣어주면 심볼 생성시 적어준 이름이 나온다.

0개의 댓글

관련 채용 정보