Fehlermeldung

TypeError: 'x' is not iterable (Firefox, Chrome)
TypeError: 'x' is not a function or its return value is not iterable (Chrome)

Fehlertyp

TypeError

Was ist falsch gelaufen?

Der Wert, welcher auf der rechten Seite von for…of oder als Argument einer Funktion wie Promise.all oder TypedArray.from ist kein iterierbares Objekt. Ein iterierbares Objekt kann vom Standardtypen wie Array, String oder Map sein oder ein Objekt, welches das iterable Protokoll implementiert.

Beispiele

Über Objekteigenschaften iterieren

In JavaScript sind Objekte nicht iterierbar, außer sie implementieren das iterable Protokoll. Demnach kann man for…of nicht für das Iterieren von Objekteigenschaften benutzen.

var obj = { 'France': 'Paris', 'England': 'London' };
for (let p of obj) { // TypeError: obj is not iterable
    // …
}

Stattdessen kann man Object.keys oder Object.entries benutzen, um über die Eigenschaften oder Einträge zu iterieren.

var obj = { 'France': 'Paris', 'England': 'London' };
// Iterate over the property names:
for (let country of obj.keys()) {
    var capital = obj[country];
    console.log(country, capital);
}

for (const [country, capital] of obj.entries())
    console.log(country, capital);

Eine andere Option ist in diesem Fall der Einsatz einer Map:

var map = new Map;
map.set('France', 'Paris');
map.set('England', 'London');
// Iterate over the property names:
for (let country of map.keys()) {
    let capital = map[country];
    console.log(country, capital);
}

for (let capital of map.values())
    console.log(capital);

for (const [country, capital] of map.entries())
    console.log(country, capital);

Über einen Generator iterieren

Generatoren sind Funktionen welche aufgerufen werden, um ein iterierbares Objekt zu produzieren.

function* generate(a, b) {
  yield a;
  yield b;
}

for (let x of generate) // TypeError: generate is not iterable
    console.log(x);

Wenn dieser nicht aufgerufen wird, ist das korrespondierende Function Objekt des Generators aufrufbar, aber nicht iterierbar. Aufrufen des Generators Produziert ein iterierbares Objekt, welche über die Werte iteriert, die während der Ausführung des Generators zurückgegeben werden.

function* generate(a, b) {
    yield a;
    yield b;
}

for (let x of generate(1,2))
    console.log(x);

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
Mitwirkende an dieser Seite: schlagi123
Zuletzt aktualisiert von: schlagi123,