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 2015.
Die statische Dateneigenschaft Symbol.iterator
repräsentiert das wohlbekannte Symbol Symbol.iterator
. Das iterierbare Protokoll verwendet dieses Symbol, um die Methode aufzurufen, 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 iterable1 = {};
iterable1[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
console.log([...iterable1]);
// Expected output: Array [1, 2, 3]
Wert
Das wohlbekannte Symbol Symbol.iterator
.
Eigenschaften von Symbol.iterator | |
---|---|
Schreibbar | nein |
Aufzählbar | nein |
Konfigurierbar | nein |
Beschreibung
Immer wenn ein Objekt iteriert werden muss (zum Beispiel zu Beginn einer for...of
-Schleife), wird dessen Methode [Symbol.iterator]()
ohne Argumente aufgerufen, und der zurückgegebene Iterator wird verwendet, um die zu iterierenden Werte zu erhalten.
Einige eingebaute Typen haben ein Standardverhalten für Iterationen, während andere Typen (wie z. B. Object
) 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]()
Weitere Informationen finden Sie unter Iterationsprotokolle.
Beispiele
Benutzerdefinierte Iterables
Wir können unsere eigenen Iterables so erstellen:
const myIterable = {};
myIterable[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
[...myIterable]; // [1, 2, 3]
Oder Iterables können direkt in einer Klasse oder einem Objekt unter Verwendung einer berechneten 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, 3
console.log(...someObj); // 'a', 'b'
Nicht korrekt geformte Iterables
Wenn die [Symbol.iterator]()
-Methode eines Iterables kein Iterator-Objekt zurückgibt, ist es ein nicht korrekt geformtes Iterable. Die Verwendung eines solchen Iterables führt wahrscheinlich zu Laufzeitfehlern oder fehlerhaftem Verhalten:
const nonWellFormedIterable = {};
nonWellFormedIterable[Symbol.iterator] = () => 1;
[...nonWellFormedIterable]; // TypeError: [Symbol.iterator]() returned a non-object value
Spezifikationen
Specification |
---|
ECMAScript® 2025 Language Specification # sec-symbol.iterator |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Polyfill für
Symbol.iterator
incore-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]()