RangeError: invalid array length

Fehlermeldung

RangeError: invalid array length (Firefox)
RangeError: Invalid array length (Chrome)
RangeError: Invalid array buffer length (Chrome)

Fehlertyp

Was ist falsch gelaufen?

entweder:

  • ein Array oder ein ArrayBuffer wurde mit einer negativen oder einer Zahl grĂ¶ĂŸer gleich 232 erzeugt, oder
  • die Array.length Eigenschaft  wurde auf eine negative oder eine Zahl grĂ¶ĂŸer gleich 232  gesetzt.

Warum ist die LĂ€nge von Array and ArrayBuffer limitiert? Die length Eigenschaft von Array und ArrayBuffer ist mit einem vorzeichenlosen 32-bit Integer definiert, sodass nur Werte von 0 bis 232-1 gĂŒltig sind.

Wenn man ein Array mit dem Konstruktor erzeugen möchte, statt mit der Literalnotation, sollte man aufpassem, dass das erste Argument als LÀnge des Arrays interpretiert wird.

Man sollte die LĂ€nge festlegen, bevor man die length Eigenschaft setzt, oder mit dem ersten Argument im Konstruktor.

Beispiele

UngĂŒltige FĂ€lle

new Array(Math.pow(2, 40))
new Array(-1)
new ArrayBuffer(Math.pow(2, 32))
new ArrayBuffer(-1)

let a = [];
a.length = a.length - 1;         // length Eigenschaft auf -1 gesetzt

let b = new Array(Math.pow(2, 32) - 1);
b.length = b.length + 1;         // length Eigenschaft auf 2^32 gesetzt

GĂŒltige FĂ€lle

[ Math.pow(2, 40) ]                     // [ 1099511627776 ]
[ -1 ]                                  // [ -1 ]
new ArrayBuffer(Math.pow(2, 32) - 1)
new ArrayBuffer(0)

let a = [];
a.length = Math.max(0, a.length - 1);

let b = new Array(Math.pow(2, 32) - 1);
b.length = Math.min(0xffffffff, b.length + 1);

// 0xffffffff ist die hexadecimal Notation fĂŒr 2^32 - 1
// kann auch als (-1 >>> 0) geschrieben werden

Siehe auch