| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Errors/is_not_iterable | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
Die JavaScript-Ausnahme "ist nicht iterierbar" tritt auf, wenn der Wert, der in ein Array oder einen Funktionsaufruf gespreadet wird, als rechte Seite in for...of, als Argument einer Funktion wie Promise.all oder Set(), oder als rechte Seite bei einer Array-Destrukturierung angegeben wird, kein iterierbares Objekt ist. Dieser Fehler tritt auch auf, wenn Array.fromAsync() oder for await...of mit einem nicht-asynchronen Iterierbaren verwendet wird.
TypeError: Spread syntax requires ...iterable[Symbol.iterator] to be a function (V8-based & Safari) TypeError: %Array%.from requires that the property of the first argument, items[Symbol.iterator], when exists, be a function (V8-based & Safari) TypeError: Array.fromAsync requires that the property of the first argument, items[Symbol.asyncIterator], when exists, be a function (V8-based & Safari) TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator)) (V8-based) TypeError: x is not async iterable (V8-based) TypeError: x is not iterable (V8-based & Firefox) TypeError: undefined is not a function (near '...y of x...') (Safari) TypeError: Array.from: no function (Safari) TypeError: Type error (Safari)
TypeError
Der Wert, der in ein Array oder einen Funktionsaufruf gespreadet wird, als rechte Seite in for...of, oder als Argument einer Funktion wie Promise.all oder Set(), oder als Quelle eines Array-Destrukturierungsmusters angegeben wird, ist kein iterierbares Objekt. Ein iterierbares Objekt kann ein eingebauter iterierbarer Typ wie Array, String oder Map, ein Generatorergebnis oder ein Objekt sein, das das iterierbare Protokoll implementiert.
const nonIterable1 = {};
const nonIterable2 = { [Symbol.iterator]: 1 };
[...nonIterable1];
Math.max(...nonIterable1);
for (const x of nonIterable1);
new Set(nonIterable1);
Array.from(nonIterable2);
new Int8Array(nonIterable2);
const [] = nonIterable1;
const myObj = { arrayOrObjProp1: {}, arrayOrObjProp2: [42] };
const {
arrayOrObjProp1: [value1],
arrayOrObjProp2: [value2],
} = myObj; // TypeError: object is not iterable
console.log(value1, value2);
In einigen Laufzeitumgebungen knnte sich herausstellen, dass das nicht-iterierbare Objekt undefined ist.
In JavaScript sind Objecte nicht iterierbar, es sei denn, sie implementieren das iterierbare Protokoll. Daher knnen Sie for...of nicht verwenden, um ber die Eigenschaften eines Objekts zu iterieren.
const obj = { France: "Paris", England: "London" };
for (const p of obj) {
//
} // TypeError: obj is not iterable
Stattdessen mssen Sie Object.keys oder Object.entries verwenden, um ber die Eigenschaften oder Eintrge eines Objekts zu iterieren.
const obj = { France: "Paris", England: "London" };
// Iterate over the property names:
for (const country of Object.keys(obj)) {
const capital = obj[country];
console.log(country, capital);
}
for (const [country, capital] of Object.entries(obj)) {
console.log(country, capital);
}
Eine andere Mglichkeit fr diesen Anwendungsfall knnte die Verwendung eines Map sein:
const map = new Map();
map.set("France", "Paris");
map.set("England", "London");
// Iterate over the property names:
for (const country of map.keys()) {
const capital = map.get(country);
console.log(country, capital);
}
for (const capital of map.values()) {
console.log(capital);
}
for (const [country, capital] of map.entries()) {
console.log(country, capital);
}
Generatorfunktionen sind Funktionen, die Sie aufrufen, um ein iterierbares Objekt zu erzeugen.
function* generate(a, b) {
yield a;
yield b;
}
for (const x of generate) {
console.log(x);
} // TypeError: generate is not iterable
Wenn sie nicht aufgerufen werden, ist das Function-Objekt, das dem Generator entspricht, aufrufbar, aber nicht iterierbar. Das Aufrufen eines Generators erzeugt ein iterierbares Objekt, das ber die whrend der Ausfhrung des Generators geernteten Werte iteriert.
function* generate(a, b) {
yield a;
yield b;
}
for (const x of generate(1, 2)) {
console.log(x);
}
Benutzerdefinierte iterierbare Objekte knnen erstellt werden, indem die Methode Symbol.iterator implementiert wird. Sie mssen sicherstellen, dass Ihre Iteratormethode ein Objekt zurckgibt, das ein Iterator ist, was bedeutet, dass es eine next-Methode haben muss.
const myEmptyIterable = {
[Symbol.iterator]() {
return []; // [] is iterable, but it is not an iterator it has no next method.
},
};
Array.from(myEmptyIterable); // TypeError: myEmptyIterable is not iterable
Hier ist eine korrekte Implementierung:
const myEmptyIterable = {
[Symbol.iterator]() {
return [][Symbol.iterator]();
},
};
Array.from(myEmptyIterable); // []
Der Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |