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 statische Dateneigenschaft Symbol.iterator repräsentiert das bekannte Symbol Symbol.iterator. Das Iterable-Protokoll verwendet dieses Symbol, um die Methode zu finden, die den Iterator für ein Objekt zurückgibt. Damit ein Objekt iterierbar ist, muss es einen [Symbol.iterator]-Schlüssel besitzen.
Probieren Sie es aus
const iterable = {};
iterable[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
console.log([...iterable]);
// Expected output: Array [1, 2, 3]
Wert
Das bekannte Symbol Symbol.iterator.
Eigenschaften von Symbol.iterator | |
|---|---|
| Schreibbar | nein |
| Aufzählbar | nein |
| Konfigurierbar | nein |
Beschreibung
Immer wenn über ein Objekt iteriert werden soll (beispielsweise zu Beginn einer for...of-Schleife), wird seine Methode [Symbol.iterator]() ohne Argumente aufgerufen. Der zurückgegebene Iterator wird verwendet, um die Werte für die Iteration abzurufen.
Einige integrierte Typen haben ein Standardverhalten für die Iteration, andere Typen (wie Object) hingegen nicht. Zu den integrierten Typen mit einer Methode [Symbol.iterator]() gehören:
Array.prototype[Symbol.iterator]()TypedArray.prototype[Symbol.iterator]()String.prototype[Symbol.iterator]()Map.prototype[Symbol.iterator]()Set.prototype[Symbol.iterator]()
Weitere Informationen finden Sie unter Iterationsprotokolle.
Beispiele
>Benutzerdefinierte iterierbare Objekte
Sie können eigene iterierbare Objekte wie folgt erstellen:
const myIterable = {};
myIterable[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
[...myIterable]; // [1, 2, 3]
Alternativ können iterierbare Objekte mithilfe einer berechneten Eigenschaft direkt innerhalb einer Klasse oder eines Objekts definiert werden:
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'
Nicht wohlgeformte iterierbare Objekte
Wenn die Methode [Symbol.iterator]() eines iterierbaren Objekts kein Iteratorobjekt zurückgibt, ist das iterierbare Objekt nicht wohlgeformt. Seine Verwendung als iterierbares Objekt führt wahrscheinlich zu Laufzeitausnahmen oder fehlerhaftem Verhalten:
const nonWellFormedIterable = {};
nonWellFormedIterable[Symbol.iterator] = () => 1;
[...nonWellFormedIterable]; // TypeError: [Symbol.iterator]() returned a non-object value
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-symbol.iterator> |
Browser-Kompatibilität
Siehe auch
- Polyfill für
Symbol.iteratorincore-js - Iterationsprotokolle
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]()