# Symbol
- ES6 추가된 새로운 primitive type
- 객체가 아닌 값으로 인식
- typeof 로 보면 Symbol 타입이 나온다.
- primitive 이지만 객체의 키로 사용할 수 있는 특징이 있다.
- Symbol.iterator 는 이터레이터 오브젝트를 생성하면서 반환한다.
- 오브젝트의 [Symbol.iterator]를 호출하면 이터레이터 오브젝트를 생성하여 반환한다.
- 심볼은 주로 이름의 충돌 위험이 없는 유일한 객체의 프로퍼티 키(property key)를 만들기 위해 사용한다.
Symbol() 로 부터 반환되는 모든 심볼 값은 고유하다.
- 심볼 데이터 형식의 유일한 목적
: 심볼 값은 객체 프로퍼티에 대한 식별자로 사용한다.
평소에는 거의 쓸일이 없다. 그러나 자바스크립트 내부적으로는 상당히 많이 쓰이며 알아두면 유용한 경우도 있다.
- 라이브러리를 제작할 때,
- 정확한 심볼이 아니면 조회가 불가능하기 때문에 다른 사용자가 악용할 여지도 없다.
- 네이밍이 충돌해서 문제가 생길여지도 없다.
const sb = Symbol('creator');
const obj = {
[sb]: 'zerocho',
a: 1,
b: 2
}
obj.creator; // undefined
obj[Symbol('creator')]; // undefined
obj[sb]; // 'zerocho'
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
iterator 에서 symbol 은 표시되지 않는다.
Object.keys(obj) // [a, b]
1
# Reference
- https://feel5ny.github.io/2019/02/03/JS_19/