Pregunta

Recuerdo haber leído en alguna parte (creo que estaba en uno de los artículos de Crockford) que usar un literal de código [] es mejor que usar la notación de new Array (); .

Pero realmente no puedo recordar ninguna ventaja de una sobre la otra.

¿Puede alguien explicarme por qué se prefiere el primero que el segundo?

Aquí hay una razón por la que puedo pensar en por qué [] es mejor que new Array (); :

var Array = function () { };

Al anular el objeto Array se romperá el código ...!

¿Alguna razón más?

¿Fue útil?

Solución

Brevity

Tiene menos bytes para transferir a través del cable, menos bytes para interpretar, menos recursos mentales para analizarlo.

Menos es más.

Consistencia

¿Cuál es la diferencia entre estas dos líneas de código?

var arr = [5];
var arr = new Array(5);

De acuerdo con aquí nuevo Array (5); no devolverá una matriz con un 5 en ella, sino que devolverá una matriz de 5 elementos, con todos los elementos siendo indefinido . Mientras que estas dos líneas devuelven matrices idénticas.

var arr = [5,6];
var arr = new Array(5,6);

Otros consejos

Una buena razón es porque el constructor Array tiene un comportamiento completamente no intuitivo. Por ejemplo:

var a = new Array(5);
console.log(a.length); //prints "5"
console.log(a[0]); //prints "undefined"

var b = new Array(1,2);
console.log(b.length); //prints "2"
console.log(b[0]); //prints "1"

En este caso, a termina siendo una matriz de tamaño 5 con todos los elementos no definidos, y b termina siendo una matriz de tamaño 2, con los valores [1,2].

var c = new Array("5");
console.log(c.length); //prints "1"
console.log(c[0]); //prints "5"

Y aquí, terminas con una matriz de un solo elemento, que contiene " 5 "

En general, probablemente nunca use los constructores en tipos incorporados en Javascript. Todos tienen casos extraños como este. Por ejemplo:

var s = new String("Hello");
var l = "Hello";
console.log(typeof(s)); // prints "object"
console.log(typeof(l)); // prints "string"

Elegancia

Para decirlo simplemente, se ve mejor Y es más fácil de analizar para un programador, especialmente para estructuras de datos más complicadas:

var a = [
    ['a list', 'of', 'strings'],
    [1, 2, 3, 4],
    { hello: "This is an object property." }
];

Versus, el método más torpe orientado a OOP:

var a = new Array();
var a2 = new Array();

a2.push('a list');
a2.push('of');
a2.push('strings');

var a3 = new Array();
a3.push(1);
a3.push(2);
a3.push(3);
a3.push(4);

var o = new Object();
o.hello = "This is an object property";
a.push(a2, a3, o);

new Array (1, 2, 3) en lugar de [1, 2, 3] es lo mismo que new String (" cow ") en lugar de "cow"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top