TypeError: 'x' is not iterable

Fehlermeldung

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

Fehlertyp

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