В JavaScript почему [] предпочтительнее, чем новый Array () ;? - PullRequest
15 голосов
/ 26 ноября 2009

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

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

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

Вот одна из причин, по которой я могу подумать, почему [] лучшечем new Array();:

var Array = function () { };

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

Есть еще причины?

Ответы [ 4 ]

34 голосов
/ 26 ноября 2009

Краткость

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

Меньше значит больше.

Последовательность

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

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

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

var arr = [5,6];
var arr = new Array(5,6);
22 голосов
/ 26 ноября 2009

Одна хорошая причина в том, что конструктор 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 со всеми неопределенными элементами, а 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"
7 голосов
/ 26 ноября 2009

Elegance

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

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);
0 голосов
/ 26 ноября 2009

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

...