Лучше писать: var arr = []; чем var arr = new Array();?

Лучше ли писать

var arr=[]; then var arr=new Array(); 
var obj={}; then var obj=new Object();

и если да, то почему?

Я читал слайд-лекция стр. 36 об этой идее, но не было дано объяснений или примеров, почему это лучше.

Ответ 1

Между этими определениями нет большой разницы, за исключением того, что первый способ использует литерал массива/объекта, а второй - конструктор массива/объекта.

Конструктор массива может возвращать разные результаты в зависимости от количества переданных аргументов. Если вы передаете один аргумент, создается новый пустой массив длины этого аргумента. Например:

// arr1 is the same as arr2
var arr1 = new Array(1, 2, 3, 4);
var arr2 = [1, 2, 3, 4];

alert(arr1.length == arr2.length); // true
alert(arr1[0]); // 1
alert(arr2[0]); // 1

Но, передавая один аргумент, получается иначе:

// arr3 has length 200 and is empty, while arr4 has length 1 and contains a number
var arr3 = new Array(200);
var arr4 = [200];

alert(arr3.length == arr4.length); // false
alert(arr3[0]); // 'undefined'
alert(arr4[0]); // 200

Самый быстрый способ определить массив или объект - это, конечно, буквальный путь, потому что вам не нужно сначала вызывать конструктор. Во всяком случае, фактическая разница в скорости незначительна, действительно.

Я сделал тест скорости в Chrome 6, в котором я определил 20 раз 10000000 того же массива 1, 2, 3, который дал следующие результаты:

Average speed per 10000000 calls
Array Constructor  : 226.55 ms
Array Literal      : 159.1  ms

Как вы можете видеть, литерал массива имеет размер 67,45 мс на 10000000 определений массива.

Ответ 2

thomas fuchs говорит в своем слайд-шоу под этим видео (часть, говорящая "обнимать язык" на стр. 20): var arr = [] и var obj = {} лучше и немного быстрее. Я не уверен, почему, но в любом случае это довольно интересное слайд-шоу:)

Ответ 3

С точки зрения типичного программиста, кажется, вы склонны использовать var arr = new Array(); чтобы дать ощущение типичного экземпляра объекта. Но в javascript обычно рекомендуется использовать var arr = []; Лично я не вижу большой разницы в использовании обоих способов, кроме одного параметра, который объясняется Harmen.

Также проверьте эту ссылку - http://yuiblog.com/blog/2006/11/13/javascript-we-hardly-new-ya/