Baseline Widely available
Die statische Dateneigenschaft 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.
const iterable1 = {};
iterable1[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
console.log([...iterable1]);
// Expected output: Array [1, 2, 3]
Wert
Das bekannte Symbol Symbol.iterator
.
Immer wenn ein Objekt durchlaufen werden muss (z.B. 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
) keines 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 mehr Informationen.
Beispiele Benutzerdefinierte IterablesWir 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 Methode [Symbol.iterator]()
eines Iterables kein Iterator-Objekt zurückgibt, ist es ein nicht wohlgeformtes Iterable. Die Verwendung als solches wird wahrscheinlich zu Laufzeitausnahmen oder fehlerhaftem Verhalten führen:
const nonWellFormedIterable = {};
nonWellFormedIterable[Symbol.iterator] = () => 1;
[...nonWellFormedIterable]; // TypeError: [Symbol.iterator]() returned a non-object value
Spezifikationen Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4