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 Dateneigenschaft Symbol.iterator
repräsentiert das wohlbekannte Symbol Symbol.iterator
. Das iterierbare Protokoll sucht dieses Symbol für die Methode, 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
Wann immer ein Objekt iteriert werden muss (wie zu Beginn einer for...of
-Schleife), wird seine 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 Standard-Iterationsverhalten, während andere Typen (wie Object
) dies nicht tun. 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 auch unter Iterierbare Protokolle.
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 innerhalb einer Klasse oder eines Objekts 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 wohlgeformte Iterables
Wenn die [Symbol.iterator]()
-Methode eines Iterables kein Iterator-Objekt zurückgibt, dann handelt es sich um ein nicht wohlgeformtes Iterable. Die Verwendung kann wahrscheinlich zu Laufzeitausnahmen oder fehlerhaftem Verhalten führen:
const nonWellFormedIterable = {};
nonWellFormedIterable[Symbol.iterator] = () => 1;
[...nonWellFormedIterable]; // TypeError: [Symbol.iterator]() returned a non-object value
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-symbol.iterator |
Browser-Kompatibilität
Siehe auch
- Polyfill von
Symbol.iterator
incore-js
- Iterierbare Protokolle
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]()