Определение массива в javascript
поэтому я хочу создать массив в javascript и запомнить два способа сделать это, поэтому я просто хочу знать, что такое фундаментальные различия, и если есть разница в производительности в этих двух "стилях"
<script type="text/javascript">
var array_1 = new Array("fee","fie","foo","fum");
var array_2 = ['a','b','c'];
for (i=0;i<array_1.length;i++){
document.write(array_1[i] + "<br />");
}
for (i=0;i<array_2.length;i++){
document.write(array_2[i] + "<br />");
}
</script>
Ответы
Ответ 1
Они делают то же самое. Преимуществами обозначений []
являются:
- Это короче.
- Если кто-то делает что-то глупое, как переопределить символ
Array
, он все равно работает.
- Нет никакой двусмысленности, если вы определяете только одну запись, тогда как при написании
new Array(3)
, если вы привыкли видеть записи, перечисленные в конструкторе, вы можете легко неверно понять, что означает [3]
, когда на самом деле это создает новый массив с length
из 3 и без записей.
- Это может быть немного быстрее (в зависимости от реализации JavaScript), потому что, когда вы говорите
new Array
, интерпретатор должен искать символ Array
, что означает перемещение всех записей в цепочке областей действия до тех пор, пока оно не будет получает к глобальному объекту и находит его, тогда как с []
это не нужно делать. Шансы того, что они имеют какое-либо ощутимое влияние реального мира в нормальных случаях использования, низки. Тем не менее, хотя...
Итак, есть несколько веских причин использовать []
.
Преимущества new Array
:
- Вы можете установить начальную длину массива, например,
var a = new Array(3);
У меня не было причин делать это через несколько лет (не с тех пор, как узнал, что массивы не являются массивами, и нет смысла пытаясь предварительно выделить их). И если вы действительно этого хотите, вы всегда можете это сделать:
var a = [];
a.length = 3;
Ответ 2
Нет никакой разницы в вашем использовании.
Единственная реальная разница в использовании заключается в передаче целочисленного параметра в new Array()
, который задает начальную длину массива (которую вы не можете сделать с нотной записью массива []
). Но они создают одинаковые объекты в любом случае.
Ответ 3
Этот тест на JSPerf показывает, что форма литера массива обычно быстрее, чем конструктор в некоторых браузерах (а не медленнее на любом).
Такое поведение, конечно, полностью зависит от реализации, поэтому вам нужно запустить собственный тест на своих целевых платформах.
Ответ 4
Я считаю, что преимущества производительности незначительны.
См. http://jsperf.com/new-array-vs-literal-array/4
Ответ 5
Я думаю, что оба способа одинаковы с точки зрения производительности, поскольку в конечном итоге они одновременно создают объект "Array". Поэтому, как только вы начнете обращаться к массиву, механизм будет таким же. Я не слишком уверен в том, насколько разнообразны механизмы построения массивов (с точки зрения производительности), хотя это не должно быть заметным выигрышем, используя один путь к другому.