Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
RangeError: ungültige Array-Länge
Die JavaScript-Ausnahme „Ungültige Array-Länge“ tritt auf, wenn eine Array-Länge angegeben wird, die entweder negativ, eine Gleitkommazahl oder größer als das vom System unterstützte Maximum ist (d.h. beim Erstellen einesArray oderArrayBuffer, oder beim Festlegen derlength Eigenschaft).
Die maximal zulässige Array-Länge hängt von der Plattform, dem Browser und der Browserversion ab. FürArray beträgt die maximale Länge 232-1. FürArrayBuffer beträgt das Maximum 231-1 (2GiB-1) auf 32-Bit-Systemen. Ab Firefox Version 89 beträgt der Maximalwert vonArrayBuffer 233 (8GiB) auf 64-Bit-Systemen.
Hinweis:Array undArrayBuffer sind unabhängige Datenstrukturen (die Implementierung der einen beeinflusst die andere nicht).
In diesem Artikel
Nachricht
RangeError: invalid array length (V8-based & Firefox)RangeError: Array size is not a small enough positive integer. (Safari)RangeError: Invalid array buffer length (V8-based)RangeError: length too large (Safari)
Fehlerart
RangeErrorWas ist schief gelaufen?
Der Fehler kann auftreten, wenn versucht wird, einArray oderArrayBuffer mit einer ungültigen Länge zu erstellen, welche folgende umfasst:
- Negative Länge, über den Konstruktor oder das Setzen der
lengthEigenschaft. - Nicht-ganzzahlige Länge, über den Konstruktor oder das Setzen der
lengthEigenschaft. (DerArrayBuffer-Konstruktor zwingt die Länge zu einer Ganzzahl, aber derArray-Konstruktor nicht.) - Überschreitung der auf der Plattform unterstützten maximalen Länge. Für Arrays beträgt die maximale Länge 232-1. Für
ArrayBufferbeträgt die maximale Länge 231-1 (2GiB-1) auf 32-Bit-Systemen oder 233 (8GiB) auf 64-Bit-Systemen. Dies kann über den Konstruktor, das Setzen derlength-Eigenschaft oder Array-Methoden geschehen, die implizit die Länge setzen (wiepushundconcat).
Wenn Sie einArray mithilfe des Konstruktors erstellen, möchten Sie wahrscheinlich stattdessen die Literalschreibweise verwenden, da das erste Argument als Länge desArray interpretiert wird. Andernfalls möchten Sie möglicherweise die Länge begrenzen, bevor Sie dielength-Eigenschaft festlegen oder sie als Argument des Konstruktors verwenden.
Beispiele
>Ungültige Fälle
new Array(2 ** 40);new Array(-1);new ArrayBuffer(2 ** 32); // 32-bit systemnew ArrayBuffer(-1);const a = [];a.length -= 1; // set the length property to -1const b = new Array(2 ** 32 - 1);b.length += 1; // set the length property to 2^32b.length = 2.5; // set the length property to a floating-point numberconst c = new Array(2.5); // pass a floating-point number// Concurrent modification that accidentally grows the array infinitelyconst arr = [1, 2, 3];for (const e of arr) { arr.push(e * 10);}Gültige Fälle
[2 ** 40]; // [ 1099511627776 ][-1]; // [ -1 ]new ArrayBuffer(2 ** 31 - 1);new ArrayBuffer(2 ** 33); // 64-bit systems after Firefox 89new ArrayBuffer(0);const a = [];a.length = Math.max(0, a.length - 1);const b = new Array(2 ** 32 - 1);b.length = Math.min(0xffffffff, b.length + 1);// 0xffffffff is the hexadecimal notation for 2^32 - 1// which can also be written as (-1 >>> 0)b.length = 3;const c = new Array(3);// Because array methods save the length before iterating, it is safe to grow// the array during iterationconst arr = [1, 2, 3];arr.forEach((e) => arr.push(e * 10));