Подтвердить что ты не робот

Определение массива в 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> 
4b9b3361

Ответ 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 показывает, что форма литера массива обычно быстрее, чем конструктор в некоторых браузерах (а не медленнее на любом).

Такое поведение, конечно, полностью зависит от реализации, поэтому вам нужно запустить собственный тест на своих целевых платформах.

Ответ 5

Я думаю, что оба способа одинаковы с точки зрения производительности, поскольку в конечном итоге они одновременно создают объект "Array". Поэтому, как только вы начнете обращаться к массиву, механизм будет таким же. Я не слишком уверен в том, насколько разнообразны механизмы построения массивов (с точки зрения производительности), хотя это не должно быть заметным выигрышем, используя один путь к другому.