Symbol.iterator

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.

Symbol.iterator — известный символ, задающий итератор объекта, используемый по умолчанию. Применяется в конструкции for...of.

Атрибуты свойства Symbol.iterator
Записываемоенет
Перечисляемоенет
Настраиваемоенет

Описание

Каждый раз, когда объект должен быть проитерирован (как, например, в начале цикла for..of), метод @@iterator вызывается без аргументов, а возвращённый итератор используется непосредственно для получения значений.

Некоторые встроенные типы имеют стандартное итерационное поведение, в то время как другие типы (как Object) таким свойством не обладают. Метод @@iterator имеют следующие встроенные типы:

Смотрите также Протоколы перебора для получения дополнительных сведений.

Примеры

Пользовательские итерируемые объекты

Мы можем создавать собственные итерируемые объекты, подобно следующему коду:

js
var myIterable = {};
myIterable[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};
[...myIterable]; // [1, 2, 3]

Плохо оформленные итераторы

Если метод @@iterator объекта не возвращает итератор, то это плохо оформленный итерируемый объект, его использование, скорее всего, приведёт к возникновению исключений или неправильному поведению:

js
var nonWellFormedIterable = {}
nonWellFormedIterable[Symbol.iterator] = () => 1
[...nonWellFormedIterable] // TypeError: [] is not a function

Спецификации

Specification
ECMAScript Language Specification
# sec-symbol.iterator

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также