Symbol.iterator
Особый ключ, который делает объект перебираемым в for...of и spread.
Доступно с: ES2015
Синтаксис
obj[Symbol.iterator] = function* () { … }Примеры
Свой перебираемый объект:
const range = {
from: 1,
to: 4,
*[Symbol.iterator]() {
for (let i = this.from; i <= this.to; i++) yield i;
},
};
console.log([...range].join(', '));
for (const n of range) {
if (n > 2) break;
console.log(n);
}Результат:
1, 2, 3, 4
1
2Итератор вручную — метод next():
const iterator = ['a', 'b'][Symbol.iterator]();
console.log(iterator.next());
console.log(iterator.next().value);
console.log(iterator.next().done);Результат:
{
"value": "a",
"done": false
}
b
trueПримечания
Итератор — объект с методом next(), который возвращает { value, done }. Массивы, строки, Map и Set уже перебираемые; обычные объекты — нет.
См. также
- function* — Функция-генератор: выдаёт значения по одному через yield.
- for...of — Перебирает значения массива, строки, Map, Set и других перебираемых объектов.
- Spread syntax — Три точки раскрывают массив или объект на отдельные элементы.
- Symbol — Создаёт уникальное значение — например, для ключа, который не пересечётся с другими.
В учебнике
- Итераторы и генераторы — Как работает for...of в JavaScript: перебираемые объекты, итераторы и метод next, функции-генераторы с yield и свой перебираемый объект.