참고자료 : https://www.youtube.com/watch?v=E9uCNn6BaGQ
참고자료 : https://poiemaweb.com/es6-symbol
우리가 property
정의를 하게될때 ,
const obj = {
1 : 'one',
false : 'boolean'
}
Object.keys(obj); // ["1" , "false"]
obj['1'] // "one"
obj['false'] // "boolean"
사용해서 Object
를 이용해서 값을 불러올수 있었는데 ,
symbol 을이용해서 정의할 수가 있다.
Symbol 은 유일한 식별자를 만들때 사용하며 , 변경 불가능한 원시 타입의 값이다.
심볼은 주로 이름의 충돌 위험이 없는 유일한 객체의 프로퍼티 키(property key)를 만들기 위해 사용한다.
Symbol
을 생성할땐 ,
let symbol = Symbol();
이런식으로 new
를 사용하지 않는다.
const a = Symbol();
const b = Symbol();
console.log(typeof a); // symbol
console.log(typeof b); // symbol
console.log(a) // Symbol()
console.log(b) // Symbol()
console.log(a===b) // false
const id = Symbol('id');
Symbol 값은 유일한 값이므로 Symbol 값을 키로 갖는 프로퍼티는 다른 어떠한 프로퍼티와도 충돌하지 않는다.
const id = Symbol('id');
const id2 = Symbol('id');
console.log(id); // Symbol(id)
console.log(id2); // Symbol(id)
출력이 똑같이 나온다. 그럼 두개를 비교하면 어떻게 될까 ??
const id = Symbol('id');
const id2 = Symbol('id');
console.log(id); // Symbol(id)
console.log(id2); // Symbol(id)
console.log(id===id2); // false
console.log(id===id2); // false
import { log } from 'console';
const id = Symbol('id');
const user = {
name : 'ash',
age : 3,
[id] : 'myid',
}
log(user);
// { name: 'ash', age: 3, [Symbol(id)]: 'myid' }
Object.keys(user); // ["name" , "age"]
id 에 값은 출력되지가 않는다. 마찬가지로 키가 Symbol
로 되어있다면 건너 뛰게 된다.