순회가능한 자료구조를 만들기 위해 약속한 규칙
배열, 문자열, Map, Set등은 이터러블
*일반 객체는 이터러블이 아님
Symbol.interator인 프로퍼티키로 사용한 메서드를 직접 구현하거나 프로토타입 체인을 통해 상속받은 Symbol.iterator 메서드를 호출하면 이터레이터 프로토콜을 준수한 이터레이터를 반환
->이러한 규약을 이터러블 프로토콜이라 하고, 이터러블 프로토콜을 준수한 객체를 이터러블이라 함
이터러블의 Symbol.iterator 메서드를 호출하면 이터레이터 프로토콜을 준수한 이터레이터를 반환
이터레이터는 next 메서드를 소유하며 next 메서드를 호출하면 이터러블을 순회하며 value와 done 프로퍼티를 갖는 이터레이터 리절트 객체를 반환
// iterable - 순회 가능한 자료구조
[Symbol.iterator]() {...}
// iterator 위 {...} 안에 들어가는 것 - 이터러블의 요소를 탐색하기 위한 포인터
{
next() {
return {value: any, done: boolean} // 이터레이터 리절트 객체
}
}
'배열은 이터러블이다' 라는 개념을 가져야 함