Em JavaScript, porque é [] preferível a new Array () ;?
-
05-07-2019 - |
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?
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"