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 Dateneigenschaft Symbol.iterator repräsentiert das wohlbekannte Symbol Symbol.iterator. Das iterierbare Protokoll verwendet dieses Symbol, um die Methode aufzurufen, 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 iterable1 = {};

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

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

Wert

Das wohlbekannte Symbol Symbol.iterator.

Eigenschaften von Symbol.iterator
Schreibbarnein
Aufzählbarnein
Konfigurierbarnein

Beschreibung

Immer wenn ein Objekt iteriert werden muss (zum Beispiel zu Beginn einer for...of-Schleife), wird dessen 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 Standardverhalten für Iterationen, während andere Typen (wie z. B. Object) dies nicht haben. Einige eingebaute Typen mit einer [Symbol.iterator]()-Methode sind:

Weitere Informationen finden Sie unter Iterationsprotokolle.

Beispiele

Benutzerdefinierte Iterables

Wir können unsere eigenen Iterables so erstellen:

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

Oder Iterables können direkt in einer Klasse oder einem Objekt 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 korrekt geformte Iterables

Wenn die [Symbol.iterator]()-Methode eines Iterables kein Iterator-Objekt zurückgibt, ist es ein nicht korrekt geformtes Iterable. Die Verwendung eines solchen Iterables führt wahrscheinlich zu Laufzeitfehlern oder fehlerhaftem Verhalten:

js
const nonWellFormedIterable = {};
nonWellFormedIterable[Symbol.iterator] = () => 1;
[...nonWellFormedIterable]; // TypeError: [Symbol.iterator]() returned a non-object value

Spezifikationen

Specification
ECMAScript® 2025 Language Specification
# sec-symbol.iterator

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
iterator

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch