Symbol.iterator

Это экспериментальная технология, часть предложения Harmony (ECMAScript 6).
Поскольку спецификация этой технологии ещё не стабилизировалась, проверьте таблицу совместимости её использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут быть изменены в будущих версиях браузеров в соответствии с изменениями в спецификации.

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

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

Описание

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

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

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

Примеры

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

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

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

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

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

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

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

Спецификация Статус Комментарий
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'Symbol.iterator' в этой спецификации.
Стандарт Изначальное определение.

Browser compatibility

Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка 43 36 (36) Нет 30 Нет
Возможность Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка Нет Нет 36.0 (36) Нет Нет Нет

See also

Метки документа и участники

 Внесли вклад в эту страницу: neutral
 Обновлялась последний раз: neutral,