심볼은 변경 불가능한 원시 타입의 값이다.
심볼은 주로 이름의 충돌 위험이 없는 유일한 객체의 프로퍼티 키(값의 위치에는 쓸 수 없다.)를 만들기 위해 사용한다.
심볼은 Symbol() 함수로 생성한다. Symbol() 함수는 호출될 때마다 Symbol 값을 생성한다. 이떄 생성된 Symbol은 객체가 아니라 변경 불가능한 원시 타입의 값이다.
Symbol() 함수는 스트링, 넘버, 불린과 같이 객체를 생성하는 생성자 함수와 달리 new 연산자를 사용하지 않는다.
Symbol() 함수에는 문자열을 인자로 전달할 수 있다. 이 문자열은 심볼 생성에 어떠한 영향을 주지 않으며 다만 생성된 심볼에 대한 설명으로 디버깅 용도로만 사용된다. 즉, 식별자의 의미가 아니다.
Symbol 값을 키로 갖는 프로퍼티는 다른 어떠한 프로퍼티와도 충돌하지 않는다.
Symbol.iterator
어떤 객체가 Symbol.iteratior를 프로퍼티 key로 사용한 메소드를 가지고 있으면 자바스크립트 엔진은 이 객체가 이터레이션 프로토콜을 따르는 것으로 간주하고 이터레이터로 동작하도록 한다.
이터러블의 Symbol.iteratior를 프로퍼티 key로 사용한 메소드는 이터레이터를 반환한다.
이터레이터는 순회 가능한 자료 구조인 이터러블의 요소를 탐색하기 위한 포인터로서 value, done 프로퍼티를 갖는 객체를 반환하는 next() 함수를 메소드로 갖는 객체이다. 이터레이터의 next() 메소드를 통해 이터러블 객체를 순회할 수 있다.
iterable에는 배열뿐만 아니라 순회가능한 다른 것도 올 수 있다. 문자같은 유사배열 등등. 객체는 순서를 보증하지않기때문에 순회할 수 없다.
const iterable = ['a', 'b', 'c'];
const iterator = iterable[Symbol.iterator]();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
'JAVASCRIPT' 카테고리의 다른 글
JAVASCRIPT ) Math.random() 공식 (0) | 2024.08.13 |
---|---|
JAVASCRIPT ) 이터레이션과 for of문 (0) | 2024.08.09 |
JAVASCRIPT ) 모듈 (0) | 2024.08.09 |
JAVASCRIPT ) canvas에 방정식 그래프 그리기 (0) | 2024.08.08 |
JAVASCRIPT ) 객체 delete (0) | 2024.08.06 |