Symbol.iterator
Symbol.iterator — известный символ, задающий итератор объекта, используемый по умолчанию. Применяется в конструкции for...of.
Атрибуты свойства Symbol.iterator |
|
|---|---|
| Записываемое | нет |
| Перечисляемое | нет |
| Настраиваемое | нет |
Описание
Каждый раз, когда объект должен быть проитерирован (как, например, в начале цикла for..of), метод @@iterator вызывается без аргументов, а возвращённый итератор используется непосредственно для получения значений.
Некоторые встроенные типы имеют стандартное итерационное поведение, в то время как другие типы (как Object) таким свойством не обладают. Метод @@iterator имеют следующие встроенные типы:
Array.prototype[@@iterator]()TypedArray.prototype[@@iterator]()(en-US)String.prototype[@@iterator]()Map.prototype[@@iterator]()(en-US)Set.prototype[@@iterator]()(en-US)
Смотрите также Протоколы перебора для получения дополнительных сведений.
Примеры
Пользовательские итерируемые объекты
Мы можем создавать собственные итерируемые объекты, подобно следующему коду:
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 |
Browser compatibility
BCD tables only load in the browser