Что такое буквальная буква в javascript и когда вы ее используете?
JSLint дает мне эту ошибку:
Проблема с символом строки 11: используйте литературную нотацию массива [].
var myArray = new Array();
Что такое буквальная буква массива и почему она хочет, чтобы я использовал ее?
Здесь показано, что new Array();
должно работать нормально... есть что-то, чего я не хватает?
Ответы
Ответ 1
Обозначение массива массива - это то, где вы определяете новый массив, используя только пустые скобки. В вашем примере:
var myArray = [];
Это "новый" способ определения массивов, и я полагаю, что он короче/чище.
Ниже приведены примеры различий между ними:
var a = [], // these are the same
b = new Array(), // a and b are arrays with length 0
c = ['foo', 'bar'], // these are the same
d = new Array('foo', 'bar'), // c and d are arrays with 2 strings
// these are different:
e = [3], // e.length == 1, e[0] == 3
f = new Array(3); // f.length == 3, f[0] == undefined
Ссылка: В чем разница между "Array()" и "[]" при объявлении массива JavaScript?
Ответ 2
См. также: Что не так с var x = new Array();
Помимо аргумента Крокфорда, я считаю, что это также связано с тем, что другие языки имеют похожие структуры данных, которые используют один и тот же синтаксис; например, Python имеет списки и словари; см. следующие примеры:
// this is a Python list
a = [66.25, 333, 333, 1, 1234.5]
// this is a Python dictionary
tel = {'jack': 4098, 'sape': 4139}
Разве это не так, как Python также грамматически корректен Javascript? (да, конечные полуколоны отсутствуют, но они также не требуются для Javascript)
Таким образом, путем повторного использования общих парадигм в программировании, мы сохраняем всех от необходимости переучивать то, что не должно быть.
Ответ 3
Помимо аргумента Крокфорда, jsPerf говорит, что это быстрее. http://jsperf.com/new-vs-literal-array-declaration
Ответ 4
Посмотрев на @ecMode jsperf, я провел еще несколько тестов.
При использовании push для добавления в массив новый массив Array() значительно ускоряется в Chrome:
http://jsperf.com/new-vs-literal-array-declaration/2
Использование индекса для добавления немного быстрее для [].