PassFront
  1. PassFront
  2. База знаний
  3. Современный JS ES6+

Что такое итератор в 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 и спредом. Генераторы упрощают создание итераторов.

Другие вопросы раздела