Iterator invocation in JavaScript

Каждый последовательный вызов итератора должен возвращать объект специальной структуры. Давайте ее рассмотрим. Пусть у нас есть массив:

let arr = [1, 2, 3];

Получим итератор массива в переменную:

let iter = arr[Symbol.iterator]();

Теперь в этой переменной содержится объект с методом next. Этот метод будет возвращать объект с ключом value, содержащим значение элемента, и ключом done, содержащим информацию о том, закончился ли перебор или нет:

console.log( iter.next() ); // {value: 1, done: false}

Последовательный вызов метода next будет каждый раз выдавать следующий элемент:

console.log( iter.next() ); // {value: 1, done: false} console.log( iter.next() ); // {value: 2, done: false} console.log( iter.next() ); // {value: 3, done: false}

А как только элементы закончатся, мы увидим следующие значения:

console.log( iter.next() ); // {value: undefined, done: true}

Получите итератор коллекции Map. Последовательно вызывайте его, пока элементы коллекции не закончатся.

Получите итератор коллекции NodeList. Последовательно вызывайте его, пока элементы коллекции не закончатся.

Получите итератор коллекции HTMLCollection. Последовательно вызывайте его, пока элементы коллекции не закончатся.

enru