В JavaScript почему [] предпочтительнее, чем новый Array () ;?
-
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 (" корова ")
вместо " корова "