[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Errors/Invalid_array_length [Back]  [Original]

RangeError: invalid array length - JavaScript | MDN

Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.

View in English Always switch to English

RangeError: invalid array length

Die JavaScript-Ausnahme "Ungltige Array-Lnge" tritt auf, wenn eine Array-Lnge angegeben wird, die entweder negativ, eine Fliekommazahl ist oder das maximal von der Plattform untersttzte Limit berschreitet (d.h. beim Erstellen eines Array oder ArrayBuffer, oder beim Setzen der length-Eigenschaft).

Die maximal zulssige Array-Lnge hngt von der Plattform, dem Browser und der Browserversion ab. Fr ein Array betrgt die maximale Lnge 232-1. Fr ein ArrayBuffer betrgt das Maximum 231-1 (2GiB-1) auf 32-Bit-Systemen. Ab Firefox Version 89 ist der Maximalwert von ArrayBuffer 233 (8GiB) auf 64-Bit-Systemen.

Hinweis: Array und ArrayBuffer sind unabhngige 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

RangeError

Was ist schiefgelaufen?

Der Fehler kann auftreten, wenn versucht wird, ein Array oder ArrayBuffer mit einer ungltigen Lnge zu erzeugen, was Folgendes einschliet:

  • Negative Lnge, ber den Konstruktor oder das Setzen der length-Eigenschaft.
  • Nicht-ganzzahlige Lnge, ber den Konstruktor oder das Setzen der length-Eigenschaft. (Der ArrayBuffer-Konstruktor zwingt die Lnge zu einem Integer, der Array-Konstruktor hingegen nicht.)
  • berschreiten der von der Plattform untersttzten maximalen Lnge. Fr Arrays betrgt die maximale Lnge 232-1. Fr ArrayBuffer betrgt die maximale Lnge 231-1 (2GiB-1) auf 32-Bit-Systemen oder 233 (8GiB) auf 64-Bit-Systemen. Dies kann ber den Konstruktor, das Setzen der length-Eigenschaft oder durch Array-Methoden, die implizit die Lnge setzen (wie push und concat), geschehen.

Wenn Sie ein Array mit dem Konstruktor erstellen, mchten Sie wahrscheinlich stattdessen die Schreibweise mit Literalen verwenden, da das erste Argument als Lnge des Array interpretiert wird. Andernfalls sollten Sie die Lnge begrenzen, bevor Sie die Lnge setzen oder sie als Argument des Konstruktors verwenden.

Beispiele

Ungltige Flle

js
new Array(2 ** 40);
new Array(-1);
new ArrayBuffer(2 ** 32); // 32-bit system
new ArrayBuffer(-1);

const a = [];
a.length -= 1; // set the length property to -1

const b = new Array(2 ** 32 - 1);
b.length += 1; // set the length property to 2^32
b.length = 2.5; // set the length property to a floating-point number

const c = new Array(2.5); // pass a floating-point number

// Concurrent modification that accidentally grows the array infinitely
const arr = [1, 2, 3];
for (const e of arr) {
  arr.push(e * 10);
}

Gltige Flle

js
[2 ** 40]; // [ 1099511627776 ]
[-1]; // [ -1 ]
new ArrayBuffer(2 ** 31 - 1);
new ArrayBuffer(2 ** 33); // 64-bit systems after Firefox 89
new 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 iteration
const arr = [1, 2, 3];
arr.forEach((e) => arr.push(e * 10));

Siehe auch


Web Proxy Viewer  |  New URL  |  Original Page