Skip to content
This repository has been archived by the owner on May 26, 2020. It is now read-only.

Latest commit

 

History

History
56 lines (42 loc) · 2.78 KB

File metadata and controls

56 lines (42 loc) · 2.78 KB

Новые возможности JavaScript — Итераторы

В ECMAScript 6 была добавлена новая концепция «итерируемых» объектов, т.н. итераторов. Итерируемые или, иными словами, «перебираемые» объекты – это те, содержимое которых можно перебрать в цикле.

Для перебора таких объектов добавлен новый синтаксис цикла: for..of.

// ECMAScript 6
const arr = [1, 2, 3];

for (let value of arr) {
  console.log(value);
}
// Ожидаемый результат: 1 -> 2 -> 3

Итераторы – расширяющая понятие «массив» концепция, которая пронизывает современный стандарт JavaScript сверху донизу.

Вот как выглядит простой итератор изнутри:

// ECMAScript 6
const iterator = {
  [Symbol.iterator]: function() {
    return this;
  },

  next: function() {
    return {value: 0, done: false};
  },
};

Цикл for..of начинается с вызова метода [Symbol.iterator]() на коллекции. Он возвращает объект-итератор. Итератором может быть любой объект с методом next(), и цикл for..of будет вызывать этот метод раз за разом, по-одному за один проход цикла.

Всякий раз, как метод next() вызывается, он возвращает один и тот же результат, сообщая циклу for..of, что: итерирование ещё не закончено, следующее значение — 0.
Это означает, что for (value of iterator) {} будет бесконечным циклом. Разумеется, типичный итератор не будет таким тривиальным.

Практически везде, где нужен перебор, он осуществляется через итераторы. Это включает в себя не только строки, массивы, но и вызов функции с оператором Spread f(...args), и многое другое.

В отличие от массивов, перебираемые объекты могут не иметь «длины» length.

Более подробно узнать про итераторы можно на MDN.