Pergunta

Lembro de ter lido em algum lugar (acho que estava em um dos artigos de Crockford) que usando uma matriz [] literal é melhor do que usar a notação new Array();.

Mas eu não consigo me lembrar quaisquer vantagens de um sobre o outro.

Alguém por favor pode me explicar sobre o porquê do primeiro é preferido sobre o último?

Aqui é uma razão que eu posso pensar sobre o porquê [] é melhor do que new Array();:

var Array = function () { };

Substituindo o objeto Array vai quebrar o código ...!

Qualquer mais razões?

Foi útil?

Solução

Brevidade

Tem menos bytes para transferir ao longo do fio, menos bytes de interpretar, menos recursos mentais para analisá-lo.

Menos é mais.

Consistência

Qual é a diferença entre essas duas linhas de código?

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

De acordo com a aqui new Array(5); não vai retornar um array com um 5 em que, em vez disso, irá devolver uma matriz de 5 elementos, com todos os elementos, estando undefined. Considerando estas duas linhas retornam matrizes idênticas.

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

Outras dicas

Uma razão boa é porque o construtor Array tem um comportamento completamente não-intuitiva. Por exemplo:

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"

Neste caso, um acaba por ser uma matriz de tamanho 5, com todos os elementos indefinido, e b acaba por ser uma matriz de tamanho 2, com os valores de [1,2].

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

E aqui, você acaba com uma matriz de elemento único, contendo "5"

Em geral, você provavelmente deve não usar os construtores em built-in tipos em Javascript. Eles todos têm casos extremos estranhas como esta. Por exemplo:

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

Elegance

Para colocá-lo simplesmente, apenas Looks mais agradável e é mais fácil para um programador de análise, especialmente para estruturas de dados mais complicado:

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

Versus o método orientado a OOP desajeitado:

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) vez de [1, 2, 3] é o mesmo que new String("cow") vez de "cow"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top