티스토리 뷰



ES5 에는 원시 타입(primitive data type)인 Boolean, undefined, Number, String, null 그리고 객체 타입(object type)인 Object 를 가지고 있었다. 


ES6 부터 새로운 친구 Symbol 타입이 생겼다. 

Symbol 타입에 대해 알아보자.


Symbol 생성

Symbol 은 고유 값만 가지는 원시 타입(primitive data type)의 값이며, 객체 프로퍼티에 대한 식별자로 사용한다.

Symbol 생성 시 Symbol() 을 사용하며, 다른 원시 타입의 객체 생성(new Boolean, new String, new Number)과 다르게 new 써서 생성을 하지 않는다.


const createSymbol = Symbol();
const numberSymbol = Symbol(1004);

const stringSymbol = Symbol('chicken');


// TypeError: Symbol is not a constructor
new Symbol();

console.log(String(stringSymbol)); //Symbol(chicken)
console.log(stringSymbol.toString()); //Symbol(chicken)
console.log(stringSymbol); //Symbol(chicken)

console
.log(typeof createSymbol); // 'symbol'
console.log(Symbol(1004) === numberSymbol); // false;


마지막 예제를 살펴보자.

보면 numberSymbol 은 Symbol(1004)로 데이터를 할당한 변수이다. 그런데 numberSymbol 과 Symbol(1004) 를 마지막에 비교하였는데, false 가 나왔다. 이유는 위에서 설명한 바와 같이 Symbol 은 고유한 값을 가지기 때문에 두 개의 데이터의 프로퍼티가 서로 다르기 때문에 결과를 false 로 내보낸 것이다.


Symbol 은 객체 프로퍼티 key로 사용할 수 있습니다. 


const obj = {};

const chickenPrice = Symbol('chickenPrice');
obj[chickenPrice] = 21000;

console.log(obj); // { [Symbol(chickenPrice)]: 21000 }


Symbol 속성

Symbol 을 생성할 때 함수를 사용하여 생성하기 때문에 Symbol도 함수 객체가 존재한다. console.dir()로 찍어보면 아래와 같은 속성들이 나온다.



위를 보면 알 수 있듯이 몇 가지 다른 타입 들에서 사용하는 속성도 존재 하고 기존 ES6 전에는 보이지 않던 새로운 메서드도 존재 한다. 


Symbol은 깊은 이해를 위해 다음 포스팅 할 iteratorfor of 문을 확실히 재 복습하고 다시 추가 설명을 하겠습니다.



감사합니다.

오늘도 행복한 코딩하세요 !

댓글
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
최근에 올라온 글
Total
Today
Yesterday