Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Symbol.iterator

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2016 browserübergreifend verfügbar.

Die statische Dateneigenschaft Symbol.iterator repräsentiert das bekannte Symbol Symbol.iterator. Das Iterable-Protokoll verwendet dieses Symbol, um die Methode zu finden, 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 iterable = {};

iterable[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};

console.log([...iterable]);
// Expected output: Array [1, 2, 3]

Wert

Das bekannte Symbol Symbol.iterator.

Eigenschaften von Symbol.iterator
Schreibbarnein
Aufzählbarnein
Konfigurierbarnein

Beschreibung

Immer wenn über ein Objekt iteriert werden soll (beispielsweise zu Beginn einer for...of-Schleife), wird seine Methode [Symbol.iterator]() ohne Argumente aufgerufen. Der zurückgegebene Iterator wird verwendet, um die Werte für die Iteration abzurufen.

Einige integrierte Typen haben ein Standardverhalten für die Iteration, andere Typen (wie Object) hingegen nicht. Zu den integrierten Typen mit einer Methode [Symbol.iterator]() gehören:

Weitere Informationen finden Sie unter Iterationsprotokolle.

Beispiele

Benutzerdefinierte iterierbare Objekte

Sie können eigene iterierbare Objekte wie folgt erstellen:

js
const myIterable = {};
myIterable[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};
[...myIterable]; // [1, 2, 3]

Alternativ können iterierbare Objekte mithilfe einer berechneten Eigenschaft direkt innerhalb einer Klasse oder eines Objekts 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 iterierbare Objekte

Wenn die Methode [Symbol.iterator]() eines iterierbaren Objekts kein Iteratorobjekt zurückgibt, ist das iterierbare Objekt nicht wohlgeformt. Seine Verwendung als iterierbares Objekt 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

Spezifikation
ECMAScript® 2027 Language Specification
# sec-symbol.iterator

Browser-Kompatibilität

Siehe auch