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
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
<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);
}
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.
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.
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%> |