6개의 타입(자료형)을 가지고 있던 ECMAScript에 새롭게 생긴 7번째 타입인 심볼에 대해 복습해봅시다.
심볼은 Symbol형식의 반환 값을 가지며 내장 객체(built-in objects)의 여러 멤버를 가르키는 정적 프로퍼티와 전역 심볼 레지스트리(global symbol registry)를 가리키는 정적 메서드를 가집니다. "new Symbol()" 문법을 지원하지 않아 생성자 측면에서는 불완전한 내장 객체 클래스(built-in object class)와 유사합니다.
const s1 = Symbol();
const s2 = Symbol(113);
const s3 = Symbol('jenna');
const s4 = new Symbol(); // Error: Symbol is not a constructor
const o = Object(s1);
console.log(s1); //Symbol()
console.log(typeof s1); //"symbol"
console.log(s2 === 113); // false
console.log(s3.toString()); // "Symbol(jenna)"
console.log(Symbol('jenna') === Symbol('jenna'));// false
console.log(typeof o); //"object"
const obj = {};
obj[Symbol("a")] = 1;
obj[Symbol.for("b")] = 2;
obj["c"] = 3;
obj.d =4;
for (let o in obj) {
console.log(o); // "c" "d"
}
console.log(Object.getOwnPropertySymbols(obj)); //Array [Symbol(a), Symbol(b)]
const obj = {};
const s = Symbol('hehe');
obj[s] = 1;
console.log(obj); // { [Symbol(hehe)]: 1 }
console.log(obj[s]); // 1
const sym = Symbol('hi');
const o = {[sym]: 1};
console.log(o[sym]); // 1
console.log(o[Object(sym)]); // 1
이렇게 심볼에 대해 알아보았습니다.
즐거운 하루되세요! 앗농!🙋🏻♀️