This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

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 ⁨сентябрь 2016 г.⁩.

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® 2026 Language Specification
# sec-symbol.iterator

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

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