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 der Symbol.iterator-Property
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:

Siehe auch Iterationsprotokolle für weitere Informationen.

Beispiele

Benutzerspezifische Iterables

Wir können unsere eigenen Iterables wie folgt erstellen:

js
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:

js
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:

js
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