Come Accedere agli Elementi di un Array in Javascript

Concetti Chiave
  • Per accedere agli elementi di un array in Javascript si utilizza l'operatore [] con l'indice dell'elemento desiderato.
  • Gli indici degli array partono da 0, quindi il primo elemento si trova all'indice 0.
  • Gli array in Javascript sono oggetti specializzati, e gli indici sono semplicemente nomi di proprietà che seguono regole specifiche.
  • Non esiste l'errore di "sfondamento dei limiti" come in altri linguaggi; se si accede a un indice che non esiste, si ottiene undefined senza errori.

Lettura e Scrittura degli Elementi di un Array

Per accedere ad un elemento di un array si utilizza l'operatore [].

Un riferimento all'array deve apparire a sinistra delle parentesi quadre. Un'espressione arbitraria che ha un valore intero non negativo dovrebbe essere all'interno delle parentesi quadre. Di conseguenza, la sintassi da adoperare è la seguente:

riferimento_array[indice]

Possiamo utilizzare questa sintassi sia per leggere che per scrivere il valore di un elemento di un array. Pertanto, le seguenti sono tutte istruzioni JavaScript valide:

let a = ["mondo"];     // Inizia con un array di un elemento
let valore = a[0];     // Legge l'elemento 0
a[1] = 3.14;           // Scrive l'elemento 1
let i = 2;
a[i] = 3;              // Scrive l'elemento 2
a[i + 1] = "ciao";     // Scrive l'elemento 3
a[a[i]] = a[0];        // Legge gli elementi 0 e 2, scrive l'elemento 3

La caratteristica speciale degli array è che quando si utilizzano nomi di proprietà che sono interi non negativi minori di 2^{32-1}, l'array aggiorna automaticamente il valore della proprietà length al nostro posto. Nel precedente esempio, ad esempio, abbiamo creato un array a con un singolo elemento. Abbiamo poi assegnato valori agli indici 1, 2 e 3. La proprietà length dell'array è cambiata man mano che lo facevamo, quindi:

a.length       // => 4

Ricordiamo che gli array sono un tipo specializzato di oggetto.

Le parentesi quadre utilizzate per accedere agli elementi dell'array funzionano proprio come le parentesi quadre utilizzate per accedere alle proprietà dell'oggetto. JavaScript converte l'indice numerico dell'array che specifichiamo in una stringa (ad esempio l'indice 1 diventa la stringa "1") quindi utilizza quella stringa come nome di proprietà. Non c'è nulla di speciale nella conversione dell'indice da numero a stringa. Possiamo farlo anche con gli oggetti regolari:

let o = {};    // Crea un oggetto semplice
o[1] = "uno";  // Lo indicizza con un intero
o["1"]         // => "uno"; i nomi delle proprietà numeriche e stringa sono gli stessi

È utile distinguere chiaramente un indice dell'array da un nome di proprietà dell'oggetto. Tutti gli indici sono nomi di proprietà, ma solo i nomi di proprietà che sono interi tra 0 e 2^{32-1} sono indici. Tutti gli array sono oggetti, e possiamo creare proprietà di qualsiasi nome su di essi. Se utilizziamo proprietà che sono indici dell'array, tuttavia, gli array hanno il comportamento speciale di aggiornare la loro proprietà length secondo necessità.

Notiamo che possiamo indicizzare un array utilizzando numeri che sono negativi o che non sono interi. Quando facciamo questo, il numero viene convertito in una stringa, e quella stringa viene utilizzata come nome di proprietà. Poiché il nome non è un intero non negativo, viene trattato come una proprietà oggetto regolare, non un indice dell'array. Inoltre, se indicizziamo un array con una stringa che risulta essere un intero non negativo, si comporta come un indice dell'array, non una proprietà dell'oggetto. Lo stesso vale se utilizziamo un numero a virgola mobile che è lo stesso di un intero:

a[-1.23] = true;  // Questo crea una proprietà chiamata "-1.23"
a["1000"] = 0;    // Questo è il 1001° elemento dell'array
a[1.000] = 1;     // Indice dell'array 1. Stesso di a[1] = 1;

Il fatto che gli indici dell'array siano semplicemente un tipo speciale di nome di proprietà dell'oggetto significa che per gli array JavaScript non esiste l'errore di sfondamento dei limiti che, invece, si presenta in altri linguaggi. In altri linguaggi, come il C o Java, se abbiamo un array di n elementi e proviamo ad accedere ad un indice con un valore maggiore o uguale a n, otteniamo un errore.

Quando proviamo a interrogare una proprietà inesistente di qualsiasi oggetto, non otteniamo un errore; otteniamo semplicemente undefined. Questo è altrettanto vero per gli array come lo è per gli oggetti:

let a = [true, false]; // Questo array ha elementi agli indici 0 e 1
a[2]                   // => undefined; nessun elemento a questo indice.
a[-1]                  // => undefined; nessuna proprietà con questo nome.