Spec-Zone.ru › JavaScript

Symbol.iterator

Базовая версия Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2015 года.

Статическое свойство данных **Symbol.iterator** представляет собой общеизвестный символ Symbol.iterator. Протокол итерации (iterable protocol) ищет этот символ для метода, который возвращает итератор для объекта. Чтобы объект был итерируемым, он должен иметь ключ [Symbol.iterator].

Попробовать

const iterable = {};

iterable[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};

console.log([...iterable]);
// Expected output: Array [1, 2, 3]

Значение

Общеизвестный символ Symbol.iterator.

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

Описание

Всякий раз, когда объект необходимо итерировать (например, в начале цикла for...of), вызывается его метод [Symbol.iterator]() без аргументов, а возвращенный итератор используется для получения итерируемых значений.

Некоторые встроенные типы имеют поведение итерации по умолчанию, в то время как другие типы (такие как Object) — нет. Некоторые встроенные типы, имеющие метод [Symbol.iterator]():

  • Array.prototype[Symbol.iterator]()
  • TypedArray.prototype[Symbol.iterator]()
  • String.prototype[Symbol.iterator]()
  • Map.prototype[Symbol.iterator]()
  • Set.prototype[Symbol.iterator]()

См. также Протоколы итерации для получения дополнительной информации.

Примеры

Определяемые пользователем итерируемые объекты

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

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

Или итерируемые объекты могут быть определены непосредственно внутри класса или объекта с использованием вычисляемого свойства:

class Foo {
  *[Symbol.iterator]() {
    yield 1;
    yield 2;
    yield 3;
  }
}

const someObj = {
  *[Symbol.iterator]() {
    yield "a";
    yield "b";
  },
};

console.log(...new Foo()); // 1, 2, 3
console.log(...someObj); // 'a', 'b'

Некорректно сформированные итерируемые объекты

Если метод [Symbol.iterator]() итерируемого объекта не возвращает объект-итератор, то это некорректно сформированный итерируемый объект. Его использование, скорее всего, приведет к исключениям во время выполнения или к некорректному поведению:

const nonWellFormedIterable = {};
nonWellFormedIterable[Symbol.iterator] = () => 1;
[...nonWellFormedIterable]; // TypeError: [Symbol.iterator]() returned a non-object value

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

Спецификация
Спецификация языка ECMAScript® 2027
# sec-symbol.iterator

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

Десктопные Мобильные Серверные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
iterator
43
12
36
30
10
43
36
30
10
4.0
43
10
1.0.0
1.0
0.12.0

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

  • Полифил Symbol.iterator в core-js
  • Протоколы итерации
  • Array.prototype[Symbol.iterator]()
  • TypedArray.prototype[Symbol.iterator]()
  • String.prototype[Symbol.iterator]()
  • Map.prototype[Symbol.iterator]()
  • Set.prototype[Symbol.iterator]()
  • arguments[Symbol.iterator]()
  • Segments.prototype[Symbol.iterator]()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/iterator

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API