2011-08-30 10 views
5

Non sono sicuro di come i motori di Javascript (in particolare i motori di browser) memorizzano un array.Fondamenti di indice di array Javascript

Ad esempio, quanta memoria utilizzare?

var x = new Array(0, 1, 2, 1000, 100000000); 

voglio mappare le date intero come indici di array, ma ho bisogno di essere sicuro che non è una cattiva idea.

risposta

11

Gli array sono "speciali" solo in un paio di modi:

  • Hanno alcuni metodi array come interessanti da loro prototipo ("slice()", ecc)
  • Hanno un length proprietà "magico" che traccia la più grande proprietà "nome" numerico

Se si memorizza qualcosa alla posizione 10.299.123 in un array nuovo di zecca, il runtime non usa tutta la memoria assegnando un vero e proprio, array vuoto. Invece, negozi di tutto ciò che si desidera memorizzare e fa in modo che length viene aggiornato a 10299124.

Ora il problema specifico con date, se si sta parlando di memorizzare il timestamp, è che (io credo ) hanno' è più grande di numeri interi a 32 bit. Gli indici di matrice sono limitati a quella dimensione. Tuttavia, tutto ciò significa che length non sarà corretto. Se non si ha realmente a cuore una qualsiasi delle cose serie in ogni caso, allora davvero tutto ciò che serve è un oggetto semplice:

var dateStorage = {}; 

dateStorage[someDate.getTime()] = "whatever"; 

JavaScript oggetti possono essere utilizzati come nome-valore mappe fino a quando il nome può essere rappresentato come una stringa (che è chiaramente vero per i numeri).

+0

Questa è stata un'ottima risposta. –

+0

Grazie. Mi piacerebbe una risposta con più aspetti tecnici sull'archiviazione di array in JS. I timestamp Unix sono numeri interi a 32 bit. –

+1

L'argomento dei tipi numerici JavaScript è molto strano e complicato. Il documento standard ECMA è lungo e noioso, ma ha una descrizione abbastanza chiara (se esaurientemente dettagliata) della semantica del linguaggio. Le descrizioni dell'Array in particolare sono, per me, piuttosto semplici. – Pointy