Итераторы и перебираемые объекты
Перебираемые (или итерируемые) объекты – это концепция, которая позволяет использовать любой объект в цикле for..of
.
Объект является итератором, если он умеет обращаться к элементам коллекции по одному за раз, при этом отслеживая своё текущее положение внутри этой последовательности.
В JavaScript итератор - это объект, который предоставляет метод next(), возвращающий следующий элемент последовательности. Этот метод возвращает объект с двумя свойствами: done
и value
.
done
- флаг, указывающий, что текущий элемент является последнимvalue
- значение текущей итерации. Значение последнего э
Можно сделать объект итерируемым, присвоив Symbol.iterator
функцию, которая возвращает итератор:
Итерируемые объекты и псевдомассивы
Есть два официальных термина, которые очень похожи, но в то же время сильно различаются. Поэтому убедитесь, что вы как следует поняли их, чтобы избежать путаницы.
Итерируемые объекты – это объекты, которые реализуют метод
Symbol.iterator
, как было описано выше.Псевдомассивы – это объекты, у которых есть индексы и свойство
length
, то есть, они выглядят как массивы.
Итого
Технически итерируемые объекты должны иметь метод
Symbol.iterator
.Результат вызова
obj[Symbol.iterator]
называется итератором. Он управляет процессом итерации.Итератор должен иметь метод
next()
, который возвращает объект{done: Boolean, value: any}
, гдеdone:true
сигнализирует об окончании процесса итерации, в противном случаеvalue
– следующее значение.
Метод
Symbol.iterator
автоматически вызывается цикломfor..of
, но можно вызвать его и напрямую.Встроенные итерируемые объекты, такие как строки или массивы, также реализуют метод
Symbol.iterator
.Строковый итератор знает про суррогатные пары.
Last updated