Это экспериментальная технология, часть предложения Harmony (ECMAScript 6).
Поскольку спецификация этой технологии ещё не стабилизировалась, проверьте таблицу совместимости её использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут быть изменены в будущих версиях браузеров в соответствии с изменениями в спецификации.
Symbol.iterator
— известный символ, задающий итератор объекта, используемый по умолчанию. Применяется в конструкции for...of
.
Атрибуты свойстваSymbol.iterator |
|
---|---|
Записываемое | нет |
Перечисляемое | нет |
Настраиваемое | нет |
Описание
Каждый раз, когда объект должен быть проитерирован (как, например, в начале цикла for..of
), метод @@iterator
вызывается без аргументов, а возвращённый итератор используется непосредственно для получения значений.
Некоторые встроенные типы имеют стандартное итерационное поведение, в то время как другие типы (как Object
) таким свойством не обладают. Метод @@iterator
имеют следующие встроенные типы:
Array.prototype[@@iterator]()
TypedArray.prototype[@@iterator]()
String.prototype[@@iterator]()
Map.prototype[@@iterator]()
Set.prototype[@@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) | Нет | Нет | Нет |