Symbol

·2022년 2월 25일

자바스크립트는 문자열, 숫자, 불리언, undefined, null, 객체의 타입이 있었지만 ES6에서 Symbol 이라는 변경 불가능한 원시 타입의 값이 추가되었다. new 연산자 없이 함수를 호출해서 선언하며, 유일무이한 값을 가진다.

const mySymbol = Symbol();
console.log(typeof mySymbol, mySymbol); // symbol, Symbol()

const mySymbol1 = Symbol('mySymbol');
const mySymbol2 = Symbol('mySymbol');
console.log(mySymbol1 === mySymbol2); //false
console.log(mySymbol1.description,typeof mySymbol1.toString()); //mySymbol, string

Symbol 값은 불리언 값을 제외하고는 암묵적 타입 변환이 일어나지 않는다.

그리고 Symbol.for 메서드를 사용하여 키와 심벌 값의 쌍이 저장된 전역 심벌 레지스트리에서 값을 검색할 수 있다. Symbol.keyFor은 심벌 값의 키를 추출한다.

const s1 = Symbol.for('mySymbol');// mySymbol 키로 저장된 값이 없다면 생성
const s2 = Symbol.for('mySymbol');// 있다면 반환
console.log(s1 === s2); // true
Symbol.keyFor(s1); //mySymbol, Symbol 함수 호출로 생성한 값은 레지스트리에 등록되지 않으므로 undefined

그리고 객체의 프로퍼티 키에 심벌 값을 할당할 수 있고, 그 값은 for ... in 이나 Object.keys, getOwnPropertyNames 메서드로 찾을 수 없으므로 은닉이 가능하다.

const obj = {
  [Symbol.for('mySymbol')]:1
};
obj[Symbol.for('mySymbol')]; // 1
console.log(Object.keys(obj)); // []

0개의 댓글