Nie ma dużej różnicy między tymi definicjami, z wyjątkiem tego, że pierwszy sposób używa literału tablicowego/obiektu, a drugi - konstruktora tablicy/obiektu.
Konstruktor tablicowy może zwracać różne wyniki, w zależności od liczby przekazanych argumentów. W przypadku przekazania jednego argumentu tworzona jest nowa pusta tablica o długości tego argumentu. Na przykład:
// 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
Ale przechodząc w jednym wyników argumentów inaczej:
// 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
najszybszą sposób zdefiniować tablicę lub obiekt jest oczywiście dosłowny sposób, ponieważ nie najpierw musisz zadzwonić do konstruktora. W każdym razie rzeczywista różnica prędkości jest naprawdę znikoma.
Zrobiłem speed test w Chrome 6, w którym określony 20 razy 10000000 tej samej tablicy 1, 2, 3
, co dało wyniki:
Average speed per 10000000 calls
Array Constructor : 226.55 ms
Array Literal : 159.1 ms
Jak widać, tablica literał jest 67,45ms szybciej za 10000000 definicji tablic.
Dobre pytanie! Moim zdaniem, z punktu widzenia piękna kodu, 'new Array()' wygląda o wiele czystsze. Zainteresowany, aby zobaczyć, co się pojawi. –
Proponowana dupe nie wspomina o obiektach. –