2011-08-30 13 views
5

No estoy seguro de cómo los motores Javascript (específicamente los motores del navegador) almacenan una matriz.Fundamentos del índice Javascript Array

Por ejemplo, ¿cuánta memoria usaría esto?

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

Quiero asignar las fechas enteras como índices de matriz, pero necesito estar seguro de que no es una mala idea.

Respuesta

11

matrices son "especiales" en sólo un par de maneras:

  • Tienen algunos métodos de arreglo similar interesantes de su prototipo ("slice()", etc)
  • Tienen una "mágica" length propiedad que rastrea la mayor propiedad "name" numérico

Si almacena algo en la posición 10299123 en una matriz de nueva construcción, el tiempo de ejecución no consume toda la memoria asignar una matriz real, vacío. En su lugar, se almacena todo lo que desee almacenar y se asegura de que length se actualiza a 10299124.

Ahora el problema específicamente con las fechas, si estamos hablando acerca del almacenamiento de la marca de tiempo, es que (yo creo ) que' re mayor que los enteros de 32 bits. Los índices de matriz están limitados a ese tamaño. Sin embargo, todo lo que eso significa es que length no será correcto. Si usted realmente no se preocupan por ninguna de las cosas matriz de todos modos, a continuación, realmente todo lo que necesita es un objeto claro:

var dateStorage = {}; 

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

JavaScript objetos se pueden utilizar como nombre-valor se asigna el tiempo que el nombre puede ser representado como una cadena (que es claramente cierto para los números).

+0

Esa fue una gran respuesta. –

+0

Gracias. Me gustaría recibir una respuesta con más detalles técnicos sobre el almacenamiento de Array en JS. Las marcas de tiempo de Unix son enteros de 32 bits. –

+1

El tema de los tipos numéricos de JavaScript es muy extraño y complicado. El documento estándar de ECMA es largo y tedioso, pero tiene descripciones bastante claras (aunque exhaustivamente detalladas) de la semántica del lenguaje. Las descripciones de Array en particular son, para mí, bastante sencillas. – Pointy