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.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]()