Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Array.prototype[Symbol.iterator]()

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2016 browserübergreifend verfügbar.

Die Methode [Symbol.iterator]() von Array-Instanzen implementiert das Iterable-Protokoll. Dadurch können Arrays mit den meisten Syntaxformen verwendet werden, die Iterables erwarten, etwa mit der Spread-Syntax und in for...of-Schleifen. Sie gibt ein Array-Iterator-Objekt zurück, das den Wert jedes Index im Array liefert.

Der Anfangswert dieser Eigenschaft ist dasselbe Funktionsobjekt wie der Anfangswert der Eigenschaft Array.prototype.values.

Probieren Sie es aus

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"

Syntax

js
array[Symbol.iterator]()

Parameter

Keine.

Rückgabewert

Derselbe Rückgabewert wie bei Array.prototype.values(): ein neues iterierbares Iterator-Objekt, das den Wert jedes Index im Array liefert.

Beispiele

Iteration mit einer for...of-Schleife

Sie müssen diese Methode nur selten direkt aufrufen. Durch die Methode [Symbol.iterator]() sind Arrays iterierbar. Syntaxformen zur Iteration wie die for...of-Schleife rufen die Methode automatisch auf, um den Iterator für die Schleife zu erhalten.

HTML

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

JavaScript

js
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);
}

Ergebnis

Den Iterator manuell verwenden

Sie können die Methode next() des zurückgegebenen Iterator-Objekts auch manuell aufrufen, um den Iterationsablauf vollständig zu steuern.

js
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

Strings und String-Arrays mit derselben Funktion verarbeiten

Da sowohl Strings als auch Arrays das Iterable-Protokoll implementieren, lässt sich eine generische Funktion entwerfen, die beide Eingaben auf dieselbe Weise verarbeitet. Das ist besser, als Array.prototype.values() direkt aufzurufen, denn dafür muss die Eingabe ein Array oder zumindest ein Objekt mit einer solchen Methode sein.

js
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.

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification
# sec-array.prototype-%symbol.iterator%

Browser-Kompatibilität

Siehe auch