Si tengo una lista de Javascript que solo tendrá teclas numéricas, ¿qué ocupa menos memoria?

var array = [];
array[0] = 'hello';
array[5] = 'world';
array[50] = 'foobar';

var obj = {};
obj[0] = 'hello';
obj[5] = 'world';
obj[50] = 'foobar';

No sé mucho sobre el motor interno de Javascript, así que ...

La razón por la que pregunto es porque esa matriz, cuando se convierte en una cadena, tendrá un montón de indefinidos en el medio. ¿Están realmente almacenados de alguna manera, o simplemente se ponen en la conversión de cadena?

16
Matchu 8 ago. 2009 a las 01:32

3 respuestas

La mejor respuesta

Una matriz es básicamente un conjunto ordenado de valores asociados con un solo nombre de variable.

En su ejemplo, creo que intenta hacer una matriz asociativa, y debe usar object, Array no está destinado a usarse para pares clave / valor.

Además, la longitud de la matriz se incrementa indirectamente cuando asigna un valor a un índice con una longitud mayor de la longitud de la matriz actual:

var array = new Array();
array[99] = "Test";
// array.length is now 100

Consulte este artículo detallado sobre el tema.

13
CMS 7 ago. 2009 a las 21:44

Probablemente la matriz de Javascript porque 'solo' puede usar valores de clave numérica, mientras que los literales de objeto proporcionan un espacio para valores de clave, e incluso si usa valores de clave numérica, probablemente se manejan de manera diferente a los valores de clave numérica para matrices.

Lo más probable es que las matrices de motivo no puedan tener valores de clave basados en texto porque se tratan de manera diferente a los literales de objeto. Supongo que debido a que probablemente se tratan de manera diferente, el procesamiento de la matriz probablemente esté más optimizado para valores de clave numérica, ya que un objeto literal está optimizado para usar cadenas o números como sus claves.

-1
Tyler Carter 7 ago. 2009 a las 21:34

JavaScript no implementa matrices como otros idiomas, por lo que no obtiene mejoras de rendimiento inherentes a una matriz normal (en cuanto a memoria); en JavaScript, una matriz es muy similar a un objeto; en realidad, es esencialmente un objeto con solo algunos métodos y capacidades adicionales (como una longitud que se actualiza sola). Yo diría que ninguno es más rápido.

0
James 7 ago. 2009 a las 22:20