Lunghezza degli Array in Javascript

Concetti Chiave
  • La proprietà length di un array in Javascript specifica il numero di elementi nell'array, ed è sempre uno in più rispetto all'indice più alto.
  • Per gli array sparsi, la proprietà length è maggiore del numero di elementi effettivamente presenti, e garantisce che non ci siano elementi con indici maggiori o uguali alla length.
  • Impostare la proprietà length a un valore inferiore elimina gli elementi con indici maggiori o uguali a quel valore.
  • Impostare la proprietà length a un valore maggiore non aggiunge nuovi elementi, ma rende l'array sparso, e gli elementi non assegnati rimangono undefined.

Lunghezza degli array

Ogni array ha una proprietà length, ed è questa proprietà che rende gli array diversi dagli oggetti JavaScript regolari.

Per gli array che sono densi (cioè, non sparsi), la proprietà length specifica il numero di elementi nell'array. Il suo valore è uno in più rispetto all'indice più alto nell'array:

// Risultato 0: l'array non ha elementi
Console.log([].length);

// Risultato 3: l'indice più alto è 2, la lunghezza è 3
Console.log(["a","b","c"].length);

Quando un array è sparso, la proprietà length è maggiore del numero di elementi, e tutto quello che possiamo dire a riguardo è che length è garantita essere più grande dell'indice di ogni elemento nell'array. Oppure, detto in altro modo, un array (sparso o no) non avrà mai un elemento il cui indice è maggiore o uguale alla sua length. Per mantenere questa invariante, gli array hanno due comportamenti speciali. Il primo lo abbiamo descritto sopra: se si assegna un valore a un elemento dell'array il cui indice i è maggiore o uguale alla length corrente dell'array, il valore della proprietà length viene impostato a i+1.

Il secondo comportamento speciale che gli array implementano per mantenere l'invariante della lunghezza è che, se si imposta la proprietà length a un intero non negativo n più piccolo del suo valore corrente, qualsiasi elemento dell'array il cui indice è maggiore o uguale a n viene eliminato dall'array:

// Iniziamo con un array di 5 elementi.
a = [1,2,3,4,5];

// a è ora [1,2,3].
a.length = 3;

// Elimina tutti gli elementi. a è [].
a.length = 0;

// La lunghezza è 5, ma nessun elemento, come new Array(5)
a.length = 5;

Si può anche impostare la proprietà length di un array a un valore più grande del suo valore corrente. Fare questo non aggiunge effettivamente nuovi elementi all'array; crea semplicemente un'area di memoria alla fine dell'array e l'array diventa automaticamente sparso. Gli elementi che non sono stati assegnati esplicitamente rimangono undefined:

// Iniziamo con un array di 3 elementi.
a = [1,2,3];

// a è ora sparso con 5 elementi.
a.length = 5;

// Gli elementi 3 e 4 sono sparsi, quindi non esistono.
console.log(a[3]); // => undefined
console.log(a[4]); // => undefined

// Gli elementi 0, 1 e 2 sono ancora definiti.
console.log(a[0]); // => 1
console.log(a[1]); // => 2
console.log(a[2]); // => 3