Penso piuttosto che sia il contrario: l'ultimo indice è basato sulla lunghezza. Penso che JS potrebbe semplicemente impostare la lunghezza per te dietro le quinte quando assegni un valore a un (ancora) indice non esistente. Il che significa che puoi leggere il tuo:
testArray[8] = 'h';
come
SetLength(testArray, 9); // or something similar (I'm not too familiar with JS)
testArray[8] = 'h';
Ci sono alcuni linguaggi là fuori che consentono gli array con altri indici di partenza, ma la maggior parte degli array che consentono l'allocazione / dimensionamento dinamico avrà indici basati su zero. Ciò significa che esiste sempre una relazione fissa tra la lunghezza dell'array e l'ultimo numero di indice:
Last index number = Length - 1
Aggiorna
JS non esegue un last index + 1
per ottenere il conteggio. Quando fai testArray[8] = 'h';
JS non imposta semplicemente la lunghezza a 8 + 1
. Prima controlla quanti elementi ci sono già nell'array. Quando l'array non dispone ancora di elementi sufficienti per archiviare qualcosa nell'indice 8, verrà ridimensionato. Ridimensiona l'array in modo che sia abbastanza grande da contenere qualcosa nell'indice 8, che, poiché gli array sono basati su zero, significa ridimensionamento su 8 + 1.
Lunghezza < > numero di elementi memorizzati
Questo non significa che l'array contenga 9 elementi. Significa solo che l'array ha spazio sufficiente per farlo. Se crei un array solo per testArray[8] = 'h';
, stai essenzialmente dicendo a JS di allocare spazio sufficiente per 9 elementi e di memorizzare 'h'
sull'elemento con indice 8.