Мотивация
- Вы когда-нибудь пытались пройтись по объекту, используя
for...of
? - Вам когда-нибудь приходилось проходить через вложенный объект или любую ненормальную структуру данных?
Вот несколько примеров распространенных ошибок:
Ответ на поставленный выше вопрос... Как вы уже догадались, Итераторы и итераторы!
Итерации
Объект является итерируемым, если он определяет свое поведение при итерации, например, какие значения перебираются в цикле в конструкции for...of
. Таким образом, используя эти знания, мы можем превратить такой объект, как nestedObj
, во что-то, что можно обойти, что мы и называем Итерируемые объекты!
Ключевые выводы
- Объект считается Итерируемым, если он реализует протокол
[Symbol.iterator]
илипротокол[Symbol.iterator]
находится вверху цепочки прототипов. В приведенном выше примере показано, что объекты не имеют[Symbol.iterator]
нигде в цепочке прототипов, поэтому они создаются вручную. - Итерируемый определяет свой протокол итерации (обсуждается ниже).
Вот и все! Помните об этих двух вещах, и Iterables будут намного менее пугающими.
Итераторы
Итератор — это объект, у которого есть метод next()
, который возвращает объект с двумя вещами.
value
— Следующее значение в последовательности итераций.done
— логическое значение, указывающее, исчерпана ли последовательность.
Ключевые выводы
- Итератор — это просто объект (помните, что функции — это объекты), у которого есть метод
next()
, который должен возвращать объект со свойствамиvalue
иdone
. - Итератору не обязательно реализовывать протокол iterable, поэтому это итератор, а не итерируемый объект.
- Итератор обеспечивает механизм, с помощью которого iterable может пройти сам себя.
Встроенные итерации — краткий список
- Массивы
- Струны
- Карты
- Наборы
Заключение
Мы знаем, что такое итераторы и итераторы в JavaScript, некоторые их различия и классифицирующие их элементы. Честно говоря, вероятность того, что вы создадите их самостоятельно, вероятно, не очень высока, но наличие ключевого понимания того, как работает сборка в итерируемых объектах, ставит вас впереди игры.
Удачного кодирования 😀 🚀