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
имеют следующие встроенные типы:
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
Спецификации
Specification |
---|
ECMAScript Language Specification # sec-symbol.iterator |
Совместимость с браузерами
BCD tables only load in the browser