Spec-Zone.ru › JavaScript

Array.prototype[Symbol.iterator]()

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

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

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

Начальное значение этого свойства совпадает с объектом функции, как и начальное значение свойства Array.prototype.values.

Попробуйте

const array = ["a", "b", "c"];
const iterator = array[Symbol.iterator]();

for (const value of iterator) {
  console.log(value);
}

// Expected output: "a"
// Expected output: "b"
// Expected output: "c"

Синтаксис

array[Symbol.iterator]()

Параметры

Нет.

Возвращаемое значение

То же возвращаемое значение, что и у Array.prototype.values(): новый итерируемый объект-итератор, который выдает значение каждого индекса в массиве.

Примеры

Итерация с использованием цикла for...of

Обратите внимание, что вы редко нуждаетесь в прямом вызове этого метода. Наличие метода [Symbol.iterator]() делает массивы итерируемыми, а синтаксические конструкции для итерации, такие как цикл for...of, автоматически вызывают этот метод для получения итератора для перебора.

HTML

<ul id="letterResult"></ul>

JavaScript

const arr = ["a", "b", "c"];
const letterResult = document.getElementById("letterResult");
for (const letter of arr) {
  const li = document.createElement("li");
  li.textContent = letter;
  letterResult.appendChild(li);
}

Результат

Ручная реализация итератора

Вы все еще можете вручную вызвать метод next() возвращаемого объекта-итератора для достижения максимального контроля над процессом итерации.

const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol.iterator]();
console.log(arrIter.next().value); // a
console.log(arrIter.next().value); // b
console.log(arrIter.next().value); // c
console.log(arrIter.next().value); // d
console.log(arrIter.next().value); // e

Обработка строк и массивов строк с помощью одной и той же функции

Поскольку и строки, и массивы реализуют протокол итерации, можно разработать универсальную функцию для обработки обоих типов входных данных одинаковым образом. Это лучше, чем прямой вызов Array.prototype.values(), который требует, чтобы входные данные были массивом или, по крайней мере, объектом с таким методом.

function logIterable(it) {
  if (typeof it[Symbol.iterator] !== "function") {
    console.log(it, "is not iterable.");
    return;
  }
  for (const letter of it) {
    console.log(letter);
  }
}

// Array
logIterable(["a", "b", "c"]);
// a
// b
// c

// String
logIterable("abc");
// a
// b
// c

// Number
logIterable(123);
// 123 is not iterable.

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

Спецификация
Языковая спецификация ECMAScript® 2027
# sec-array.prototype-%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
38
12
36
27–36Используется заполнитель свойства @@iterator.
17–27Используется заполнитель свойства iterator.
25
10
38
36
27–36Используется заполнитель свойства @@iterator.
17–27Используется заполнитель свойства iterator.
25
10
3.0
38
10
1.0.0
1.0
0.12.0

См. также

  • Polyfill Array.prototype[Symbol.iterator] в core-js
  • Руководство по индексируемым коллекциям
  • Array
  • Array.prototype.keys()
  • Array.prototype.entries()
  • Array.prototype.values()
  • TypedArray.prototype[Symbol.iterator]()
  • String.prototype[Symbol.iterator]()
  • 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/Array/Symbol.iterator

Spec-Zone.ru

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