본문 바로가기
Javascript/ECMAScript 2015 (ES6)

[ES 6] Symbol

by parkjp 2017. 9. 11.

 

1. Symbol

 

 Symbol은 ES6에서 처음 선보인, 완전히 새로운 원시 타입으로, 심볼값은 유일하며 변경할 수 없다. 심볼은 리터럴 형식이 없고 Symbol() 함수로 생성한다. 이 함수는 호출할 때마다 유일한 심볼을 반환한다.

 

또한 심볼에 관한 서술을 선택인자로 줄 수 있다. 심볼 자체에 접근하려는 시도는 아니고 단지 디버깅 용이다. 서술이 동일해도 심볼까지 동등하진 않다.

 


let a = Symbol();

let b = Symbol();

let c = Symbol('설명');

 

console.log(a === b); // false

 

 자바스크립트에서 객체의 프로퍼티 키는 보통 문자열 타입이었지만, ES6부터는 문자열과 심볼 둘 다 가능하다.

 


let obj = null;
let a = null;
let b = Symbol();

a = b;
obj = {
[b] : "심볼"
};

console.log(obj[b]); // 심볼
console.log(obj[b] == obj[a]); // true
console.log(obj[a]); // 심볼

 

 Object.getOwnPropertyNames()로는 심볼 프로퍼티를 조회할 수 없기 때문에 객체의 심볼 프로퍼티를 배열로 가져오는 Object.getOwnPropertySymbols()메소드가 고안되었다.

 


let a = Symbol("심볼1");
let b = Symbol("심볼2");

let obj = {
    [a] : "내 심볼1",
    [b] : "내 심볼2"
};

console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(심볼1), Symbol(심볼2)]

 

반응형