자바스크립트에서 Primitive 값은
const num = 100;을 할당하면
ES5의 primitive 값 타입
ES6에서 symbol 타입 추가
wrapper 오브젝트는?
wrapper 오브젝트가 있는 프리미티브 값 타입
const obj = new String(100);
undefined, null은 wrapper 오브젝트 없음
const sym = Symbol();
log(sym);
log(typeof sym);
// Symbol()
// symbol
const one = Symbol();
const two = Symbol();
log(one == two);
// false
let sym = Symbol();
try {
const add = sym + 5;
} catch(e){
log("연산 불가");
};
// 연산 불가
let sym = Symbol();
try {
+sym;
} catch{
log("값 타입 변경 불가");
};
// 값 타입 변경 불가
const sym = Symbol("주석, 설명");
log(sym);
// Symbol(주석, 설명)
const sym = Symbol("설명");
log(sym.toString() + "연결");
// Symbol(설명)연결
const sym = Symbol("주석, 설명");
try {
`${sym}`
} catch {
log("`${sym} 불가`");
};
// `${sym} 불가`
const sym = Symbol("설명");
const obj = {[sym]: 100}; // [sym]처럼 대괄호 안에 Symbol()로 할당한 변수 이름 작성 => 이를 symbol-keyed property라고 부름
// 프로퍼티 값 추출 방법
const sym = Symbol("설명");
const obj = {[sym]: 100};
log(obj[sym]);
log(obj.sym);
// 100
// undefined
const sym = Symbol("함수 이름");
const obj = {
[sym](param){
return param;
}
};
log(obj[sym](200));
// 200
const obj = {
[Symbol("100")]: 100,
two: 200
};
for (let key in obj){
log(key);
};
// two
Object.getOwnPropertySymbols()로 열거 가능
for-of문에서 사용
const list = [Symbol("100")];
for (let value of list){
log(value);
};
// Symbol(100)
const sym = Symbol("JSON");
const result = JSON.stringify({[sym]: "ABC"});
log(result);
// {}