Что такое итератор в JavaScript и как работает метод next()?
Современный JS ES6+
Итератор — объект с методом next(), который выдаёт последовательность значений по одному. next() возвращает объект { value, done }: очередное значение и признак завершения.
const iterator = {
i: 0,
next() {
return this.i < 3
? { value: this.i++, done: false }
: { value: undefined, done: true };
},
};
iterator.next(); // { value: 0, done: false }Итерируемый объект
Объект, у которого есть метод [Symbol.iterator](), возвращающий итератор. Такие объекты работают с for...of, спредом, деструктуризацией, Array.from.
const range = {
from: 1, to: 3,
[Symbol.iterator]() {
let cur = this.from;
const end = this.to;
return { next: () => cur <= end ? { value: cur++, done: false } : { done: true } };
},
};
[...range]; // [1, 2, 3]Встроенные итерируемые: массивы, строки, Map, Set, arguments. Обычные объекты — нет.
Генераторы
function* возвращает итератор автоматически: yield задаёт значения, а next() возобновляет выполнение. Это самый короткий способ писать итераторы и ленивые последовательности.
Коротко для собеседования
Итератор — объект с next(), возвращающим { value, done }. Итерируемый объект имеет [Symbol.iterator], поэтому работает с for...of и спредом. Генераторы упрощают создание итераторов.