반복 가능한(iterable) 객체는 배열을 일반화한 객체이다.
for..of
반복문 적용이 가능하다.
이터레이터를 리턴하는 [Symbol.iterator]()
를 가진 값
이터레이터 :
{value, done}
객체를 리턴하는next()
를 가진 값
이터러블 / 이터레이터 프로토콜 : 이터러블을
for...of
, 전개 연산자 등과 함께 동작하도록 한 규약
예시 1
function* gen() {
yield 1;
if (false) yield 2;
yield 3;
}
let iter = gen();
console.log(iter[Symbol.iterator]() == iter); // true
console.log(iter.next()); // {value: 1, done: false}
console.log(iter.next()); // {value: 3, done: false}
console.log(iter.next()); // {value: undefined, done: false}
for (const a of gen()) console.log(a);
예시2
function* odds(l) {
for (let i = 0; i < l; i++) {
if (i % 2) yield i;
}
}
let iter2 = odds(10);
console.log(iter2.next()); // {value: 1, done: false}
console.log(iter2.next()); // {value: 3, done: false}
console.log(iter2.next()); // {value: 5, done: false}
console.log(iter2.next()); // {calue: 7, done: false}
console.log(iter2.next()); // {calue: 9, done: false}
console.log(iter2.next()); // {calue: undefined, done: true}