2010-08-02 14 views
6

Czy lepiej napisaćCzy lepiej napisać: var arr = []; niż var arr = new Array() ;?

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

a jeśli tak, to dlaczego?

Czytam slide lection page 36 o tym pomyśle, ale nie podano żadnego wyjaśnienia ani przykładu, dlaczego jest lepszy.

+1

Dobre pytanie! Moim zdaniem, z punktu widzenia piękna kodu, 'new Array()' wygląda o wiele czystsze. Zainteresowany, aby zobaczyć, co się pojawi. –

+0

Proponowana dupe nie wspomina o obiektach. –

Odpowiedz

6

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.

+0

pytanie, co jeszcze szybciej dla komputera uruchomić – Yosef

+0

, podczas gdy jest to interesujący punkt, że konstruktor 'Array' traktuje argumenty inaczej w zależności od tego, ile jest, myślę, że jest całkowicie mylące, aby wymienić to jako różnicę w porównanie dwóch sposobów tworzenia tablicy. '[]' nie jest metodą, którą wywołujesz z argumentami, tak samo jak 'var a =" test "' jest czterema argumentami przekazanymi do '' '-funkcji. jest to nic więcej niż składnia do tworzenia tablic, która niejawnie zajmuje się przypisywaniem wymiarów. –

+3

http://jsperf.com/literal-vs-constructor-array – James

1

Thomas Fuchs mówi w swoim slideshow pod tym filmie (część mówiąc "objąć języka" na stronie 20): var arr = [] i var obj = {} jest lepsze i nieco szybciej. Nie jestem pewien dlaczego, ale w każdym razie jest to całkiem ciekawy pokaz slajdów :)

1

Z typowej perspektywy programisty wydaje się, że używasz var arr = new Array(); tak, aby dać wrażenie typowego tworzenia obiektów. Ale w javascriptu jego zwykle dobrą praktyką jest użycie var arr = []; Osobiście nie widzę dużej różnicy w używaniu obu sposobów z wyjątkiem jednego parametru, który jest wyjaśniony przez Harmen.

Sprawdź ten link też - http://yuiblog.com/blog/2006/11/13/javascript-we-hardly-new-ya/

Powiązane problemy