Javascript Array конструктор проблема - PullRequest
2 голосов
/ 07 января 2012

Мне интересно, почему не рекомендуется использовать объявление массива:

 var arr = new Array() 

, поскольку я думал, что объявление на [] должно быть защищено в случае перезаписи Array, но...

Array = 1;
var arr = [] // boom  
TypeError: Cannot read property 'slice' of undefined

Лично я предпочитаю использовать var arr = [], но сейчас я не знаю, в чем преимущество использования [] вместо Array, за исключением того, что пишите быстрее.

Ответы [ 6 ]

4 голосов
/ 07 января 2012

как я и думал, объявление в [] должно быть защищено в случае перезаписи Array, но ...

Он находится под EcmaScript 5, но не под EcmaScript 3, поэтому его не будет в старых браузерах.

Соответствующая часть спецификации равна http://es5.github.com/#x11.1.4

  1. Пусть массив будет результатом создания нового объекта, как будто выражением new Array(), где Array - это стандартный встроенный конструктор с таким именем .

Текст, выделенный жирным шрифтом, был добавлен в EcmaScript 5, но отсутствовал в EcmaScript 3.

4 голосов
/ 07 января 2012

Оба метода являются взаимозаменяемыми (в отношении функциональности), за исключением одного случая:

Это не эквивалентно :

var array = new Array(3);  // <-- Creates an array with length 3
var array = [3];

//If you wanted to use the `Array` to create an array with one element, use:
var array = new Array();
array[0] = 3;

[] не только короче, но также соответствует.Конструктор Array полезен только для создания массивов с начальной длиной.

2 голосов
/ 07 января 2012
0 голосов
/ 08 января 2012

Я провел тест .Похоже, что если вы переопределите window.Array с чем-либо, кроме другой функции, он не будет работать.

0 голосов
/ 07 января 2012

IMO, не имеет значения, используете ли вы new Array() или =[]. Потому что большинство современных Javascript-движков браузеров достаточно умны, чтобы использовать преимущества небольших различий в реализации. Я часто использую =[] только из-за того, что сбрасываю лишние байты из источника javascript.

0 голосов
/ 07 января 2012

[] это ничего не значит, на самом деле Javascript явно не упоминает ничего подобного. поэтому вы должны следовать правилам объявления переменных, как это обычно упоминается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...