Non c'è una grande differenza tra queste definizioni, tranne il fatto che il primo modo usa il letterale array/object e il secondo il costruttore di array/oggetto.
Il costruttore di array può restituire risultati diversi, a seconda del numero di argomenti passati. Se si passa in un argomento, viene creata una nuova matrice vuota della lunghezza di tale argomento. Ad esempio:
// 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
Ma, passando in uno risulta diverso argomento:
// 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
Il modo più rapido per definire una matrice o un oggetto è naturalmente il modo letterale, perché non si fa è necessario chiamare prima il costruttore. In ogni caso, la differenza di velocità effettiva è trascurabile, davvero.
ho fatto un speed test in Chrome 6, in cui ho definito 20 volte 10000000 dello stesso array 1, 2, 3
, che ha dato questi risultati:
Average speed per 10000000 calls
Array Constructor : 226.55 ms
Array Literal : 159.1 ms
Come si può vedere, l'array letterale è più veloce per 67,45ms 10000000 definizioni di array.
Bella domanda! Secondo me, dal punto di vista della bellezza del codice, 'new Array()' sembra molto più pulito. Interessato a vedere cosa viene fuori. –
Il dupe proposto non menziona oggetti. –