2010-08-02 11 views
6

¿Es mejor escribir¿Es mejor escribir: var arr = []; que var arr = new Array() ;?

var arr=[]; then var arr=new Array(); 
var obj={}; then var obj=new Object(); 

y si es así, ¿por qué?

Leí slide lection page 36 sobre esa idea, pero no se dio ninguna explicación o ejemplo por qué es mejor.

+1

Buena pregunta! En mi opinión, desde un punto de vista de belleza de código, 'new Array()' se ve mucho más limpio. Interesado en ver qué surge. –

+0

La víctima propuesta no menciona objetos. –

Respuesta

6

No hay una gran diferencia entre estas definiciones, excepto que la primera forma utiliza la matriz/objeto literal y la segunda la matriz/objeto constructor.

El constructor de la matriz puede arrojar resultados diferentes, dependiendo del número de argumentos pasados. Si pasa un solo argumento, se crea una nueva matriz vacía de la longitud de ese argumento. Por ejemplo:

// arr1 is the same as arr2 
var arr1 = new Array(1, 2, 3, 4); 
var arr2 = [1, 2, 3, 4]; 

alert(arr1.length == arr2.length); // true 
alert(arr1[0]); // 1 
alert(arr2[0]); // 1 

Pero, pasando de uno Resultados argumento diferente:

// arr3 has length 200 and is empty, while arr4 has length 1 and contains a number 
var arr3 = new Array(200); 
var arr4 = [200]; 

alert(arr3.length == arr4.length); // false 
alert(arr3[0]); // 'undefined' 
alert(arr4[0]); // 200 

La forma más rápida para definir una matriz u objeto es, por supuesto, la forma literal, porque no lo hace Necesito llamar al constructor primero. De todos modos, la diferencia de velocidad real es insignificante, realmente.

hice un speed test en Chrome 6, en el que he definido 10000000 20 veces la misma matriz 1, 2, 3, que dio los siguientes resultados:

Average speed per 10000000 calls 
Array Constructor : 226.55 ms 
Array Literal  : 159.1 ms 

Como se puede ver, la matriz literal es más rápido por 67,45ms 10000000 definiciones de matriz.

+0

la pregunta también aquí ¿qué más rápido para la computadora ejecutar – Yosef

+0

mientras que es un punto interesante que el constructor 'Array' trata los argumentos de manera diferente en función de la cantidad que hay, creo que es completamente engañoso enumerar eso como una diferencia en una comparación entre las dos formas de crear una matriz. '[]' no es un método que invoque con argumentos, al igual que 'var a =" test "' son cuatro argumentos pasados ​​a una '' función ''. no es más que una sintaxis para crear matrices, que solo se ocupa implícitamente de la asignación de dimensiones. –

+3

http://jsperf.com/literal-vs-constructor-array – James

1

thomas fuchs dice en su slideshow, debajo de ese video (la parte que dice "adopta el lenguaje" en la página 20): var arr = [] y var obj = {} es mejor y ligeramente más rápido. No estoy seguro por qué, pero de todos modos, es una presentación de diapositivas bastante interesante :)

1

Desde una perspectiva típica de programador, parece que se tiende a utilizar var arr = new Array(); para dar la sensación de instanciación de objeto típica. Pero en javascript generalmente es una buena práctica usar var arr = []; Personalmente, no veo mucha diferencia en el uso de ambas formas, excepto en un parámetro explicado por Harmen.

Comprobar este enlace también - http://yuiblog.com/blog/2006/11/13/javascript-we-hardly-new-ya/

Cuestiones relacionadas