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 Daten-Eigenschaft Symbol.iterator
repräsentiert das bekannte Symbol Symbol.iterator
. Das iterable 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 haben.
Probieren Sie es aus
Wert
Das bekannte Symbol Symbol.iterator
.
Eigenschaften von Symbol.iterator | |
---|---|
Schreibbar | nein |
Aufzählbar | nein |
Konfigurierbar | nein |
Beschreibung
Wann immer ein Objekt iteriert werden muss (zum Beispiel zu Beginn einer for...of
Schleife), wird seine [Symbol.iterator]()
Methode 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 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 auch Iterationsprotokolle für weitere Informationen.
Beispiele
Benutzerspezifische 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 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 ist es ein nicht wohlgeformtes Iterable. Die Verwendung eines solchen führt wahrscheinlich zu Laufzeitausnahmen oder fehlerhaftem Verhalten:
const nonWellFormedIterable = {};
nonWellFormedIterable[Symbol.iterator] = () => 1;
[...nonWellFormedIterable]; // TypeError: [Symbol.iterator]() returned a non-object value
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-symbol.iterator |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Polyfill von
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]()