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

StackOverflow https://stackoverflow.com/questions/1800594

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

var Array = function () { };

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

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

Это было полезно?

Решение

Краткость

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

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

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

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

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

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

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

Другие советы

Одна хорошая причина в том, что конструктор 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"

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top