Questa traduzione è incompleta. Collabora alla traduzione di questo articolo dall’originale in lingua inglese.

Messaggio

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

Tipo di errore

RangeError

Cosa è andato storto?

Un invalid array length può comparire in queste situazioni:

  • Quando viene creato un Array o un ArrayBuffer  che ha lunghezza negativa o maggiore uguale a  232, oppure
  • quando viene impostata la proprietà Array.length  a un valore che è negativo o maggiore uguale a 232.

Perché la lunghezza di Array e ArrayBuffer è limitata? La proprietà length di un Array o di un ArrayBuffer è rappresentata da un intero di 32-bit  senza segno, che quindi permette di memorizzare valori nell'intervallo da 0 a 232 - 1.

Se stai creando un Array utilizzando il costruttore, potresti invece utilizzare la notazione letterale dove il primo argomento è interpretato come la lunghezza dell' Array.

Altrimenti, potresti voler bloccare la lunghezza prima di settare la proprietà length, o utilizzarla come argomento del costruttore.

Esempi

Casi non validi

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;         // setta -1 alla proprietà length

let b = new Array(Math.pow(2, 32) - 1);
b.length = b.length + 1;         // setta 2^32 alla proprietà length

Casi validi

[ 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 è la notazione esadecimale di 2^32 - 1
// che può essere riscritta come (-1 >>> 0)

Guarda anche

Tag del documento e collaboratori

 Hanno collaborato alla realizzazione di questa pagina: oly_oly
 Ultima modifica di: oly_oly,