Lunghezza degli Array in Javascript
- 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 allalength
. - 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 rimangonoundefined
.
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