유일한 식별자를 만들 때 사용한다. 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'] , 키가 심볼형인 프로퍼티는 건너뛴다.
// 특정 객체의 원본데이터는 건들이지 않고 속성을 추가할 수 있다.
심볼은 유일성이 보장된다.
심볼을 객체의 키로 사용하면 그 키는 숨겨진다. 특정 객체의 원본데이터는 건들이지 않고 속성을 추가할 수 있다.
심볼은 이름이 같더라도 모두 다른존재다.
그런데 가끔 전역변수처럼 이름이 같으면 같은 객체를 가리킬 필요가 있는데
const id1 = Symbol.for("id");
const id2 = Symbol.for("id");
console.log(id1 === id2); // true
Symbol.keyFor(id1) // "id"
Symbol.keyFor를 이용해 변수를 넣어주면 심볼 생성시 적어준 이름이 나온다.