Fehlermeldung
RangeError: invalid array length (Firefox) RangeError: Invalid array length (Chrome) RangeError: Invalid array buffer length (Chrome)
Errortyp
Was ist falsch gelaufen?
entweder:
- ein
Array
oder einArrayBuffer
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, wo nur Werte von 0 bis 232-1 gültig sind.
Wenn man ein Array mit dem Konstruktor erzeugt möchte, statt mit der Literalnotation, sollte man aufpassem, da das erste Argument als Länge des Arrays interpretiert wird.
Sonst sollte man die Länge vorher 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
Schlagwörter des Dokuments und Mitwirkende
Schlagwörter:
Mitwirkende an dieser Seite:
schlagi123,
akumagamo
Zuletzt aktualisiert von:
schlagi123,