В JavaScript, почему [] предпочитают новый Array();?

Я помню, где-то читал (я думаю, что это было в одной из работ Крокфорда), что использование литерала массива [] лучше, чем использование нотации new Array();.

Но я не могу вспомнить никаких преимуществ одного над другим.

Может кто-нибудь объяснить мне, почему первый предпочитает последний?

[Обновление]

Вот почему почему [] лучше, чем new Array();:

var Array = function () { };

Переопределение объекта Array приведет к поломке кода...!

Другие причины?

Ответы

Ответ 1

Краткость

У него меньше байтов для передачи по проводу, меньше байтов для интерпретации, меньше умственных ресурсов для его анализа.

Меньше.

Согласованность

В чем разница между этими двумя строками кода?

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

Согласно здесь new Array(5); не вернет массив с 5 в нем, вместо этого он вернет массив из 5 элементов, со всеми элементы undefined. В то время как эти две строки возвращают идентичные массивы.

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

Ответ 2

Одна хорошая причина заключается в том, что конструктор Array имеет совершенно неинтуитивное поведение. Например:

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"

В этом случае a заканчивается массивом размера 5 со всеми элементами undefined, а b заканчивается массивом размера 2 со значениями [1,2].

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

И здесь вы получаете одноэлементный массив, содержащий "5"

В общем, вы должны никогда использовать конструкторы встроенных типов в Javascript. У всех этих стран есть такие крайние случаи. Например:

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

Ответ 3

Элегантность

Проще говоря, это просто выглядит лучше И проще программисту разобраться, особенно для более сложных структур данных:

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

В сравнении с неуклюжим ООП-ориентированным методом:

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);

Ответ 4

new Array(1, 2, 3) вместо [1, 2, 3] совпадает с new String("cow") вместо "cow"