Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Symbol.iterator
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
Die statische DateneigenschaftSymbol.iterator repräsentiert daswohlbekannte SymbolSymbol.iterator. Dasiterierbare Protokoll sucht mit diesem Symbol nach der Methode, die den Iterator für ein Objekt zurückgibt. Damit ein Objekt iterierbar ist, muss es einen[Symbol.iterator]-Schlüssel haben.
In diesem Artikel
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 wohlbekannte SymbolSymbol.iterator.
Eigenschaften vonSymbol.iterator | |
|---|---|
| Schreibbar | nein |
| Aufzählbar | nein |
| Konfigurierbar | nein |
Beschreibung
Immer wenn ein Objekt iteriert werden muss (wie zu Beginn einerfor...of Schleife), wird seine Methode[Symbol.iterator]() ohne Argumente aufgerufen, und der zurückgegebeneIterator wird verwendet, um die zu iterierenden Werte zu erhalten.
Einige eingebaute Typen haben ein Standardverhalten für die Iteration, während andere Typen (wieObject) dies nicht haben. Einige eingebaute Typen mit einer[Symbol.iterator]()-Methode sind:
Array.prototype[Symbol.iterator]()TypedArray.prototype[Symbol.iterator]()String.prototype[Symbol.iterator]()Map.prototype[Symbol.iterator]()Set.prototype[Symbol.iterator]()
Siehe auchIterationsprotokolle für weitere Informationen.
Beispiele
>Benutzerdefinierte Iterables
Wir können unsere eigenen Iterables wie folgt erstellen:
const myIterable = {};myIterable[Symbol.iterator] = function* () { yield 1; yield 2; yield 3;};[...myIterable]; // [1, 2, 3]Oder Iterables können direkt innerhalb einer Klasse oder eines Objekts unter Verwendung einerberechneten Eigenschaft 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, 3console.log(...someObj); // 'a', 'b'Nicht wohlgeformte Iterables
Wenn die[Symbol.iterator]()-Methode eines Iterables kein Iterator-Objekt zurückgibt, ist es ein nicht wohlgeformtes Iterable. Die Verwendung dessen wird wahrscheinlich zu Laufzeitausnahmen oder fehlerhaftem Verhalten führen:
const nonWellFormedIterable = {};nonWellFormedIterable[Symbol.iterator] = () => 1;[...nonWellFormedIterable]; // TypeError: [Symbol.iterator]() returned a non-object valueSpezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-symbol.iterator> |