2010-05-31 6 views

Respuesta

13

Puede ser porque el objeto Array se puede sobrescribir en JavaScript pero la notación literal de la matriz no. Ver this answer para un ejemplo

+3

Esto depende por aplicación embargo. Al menos en el pasado [] se usó el constructor Array en algunos motores JS (iirc había una fuzz sobre las secuencias de comandos que podían capturar la creación de la matriz para las solicitudes JSONP anulando el constructor de la matriz). –

+0

@reko_t - eso es muy cierto. Sé que en Firefox, la matriz literal no usa el constructor Array, no está seguro de los demás (no hay forma de verificarlo en este momento, ¿podría confirmar alguien?) –

+0

¿Alguien podría reparar el enlace, por favor? La edición de iPhone es complicada :) –

11

También tenga en cuenta que al hacerlo:

var x = [5]; 

es diferente que hacer:

var x = new Array(5); 

El primero crea un inicializa una matriz con un elemento con el valor de 5. La tarde crea una inicialización de una matriz con 5 elementos indefinidos.

+11

Y, para hacerlo más divertido, 'new Array (1, 2)' es igual a '[1, 2]'. –

3

Es menos escribir, que en mi opinión siempre gana :-)

Una vez que ha corregido un error extraño en una de nuestras páginas. La página quería crear una lista de claves de bases de datos numéricas como una matriz de Javascript. Las claves siempre eran enteros grandes (siempre se establecía un bit alto como indicador). El código original se veía como:

var ids = new Array(${the.list}); 

Bueno, ¿adivina qué pasó cuando la lista tenía solo un valor en ella?

var ids = new Array(200010123); 

lo que significa, "crear una matriz e inicializarla para que haya 200 millones de entradas vacías".

+0

En realidad es 20. – BalusC

+0

bueno, no recuerdo exactamente cómo eran las ID, pero era lo suficientemente grande como para causar una memoria inmediata fuera de la memoria – Pointy

1

Por lo general, una matriz literal (var a = [1,2,3] o a = []) es el camino a seguir.

Pero de vez en cuando necesita una matriz donde la longitud misma es la característica definitoria de la matriz.

var A = Array (n) sería (utilizando un literal) necesitan dos Expresiones del

var A = []; A.length = n;

En cualquier caso, no necesita el operador 'nuevo' con el constructor Array, , no de la manera en que DEBE 'nuevo' con un nuevo objeto Date, por ejemplo.

1

Para crear el Array sin Longitud

var arr = []; 

Para crear el Array con una longitud de más dinámicamente

var arr; 
(arr = []).length = 10; // 10 is array length 

Para crear el Array con una longitud de menos dinámicamente

var arr = []; 
arr.length = 10; 
Cuestiones relacionadas