2010-08-02 17 views
6

eğer öyleyse daha iyiYazmak daha iyi: var arr = []; var arr = new Array() ;?

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

yazmak ve mı, neden?

Bu fikir hakkında slide lection page 36 numaralı telefonu okudum, ancak hiçbir açıklama yapılmadı ya da neden daha iyi olduğu hakkında bir açıklama yapılmadı.

+1

İyi soru! Benim görüşüme göre, bir kod güzellik bakış açısından, 'yeni Array()' daha temiz görünüyor. Neyin peşinde olduğunu görmek istiyor. –

+0

Önerilen dupe, nesnelerden bahsetmiyor. –

cevap

6

Bu tanımlamalar arasında büyük bir fark yoktur; ilk yöntem dizi/nesne değişmezini ve ikincisi dizi/nesne yapıcısını kullanır.

Dizi yapıcısı, iletilen argümanların sayısına bağlı olarak farklı sonuçlar döndürebilir. Bir bağımsız değişkeni iletirseniz, bu argümanın uzunluğundan yeni bir boş dizi oluşturulur. Aksi, çünkü

// 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 

bir dizi ya da bir nesneyi tanımlamak için en hızlı bir şekilde tabii değişmez bir şekilde: Örneğin:

// 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 

Ancak, farklı bir bağımsız değişken sonuçları geçen önce kurucuyu aramalıyım. Her neyse, gerçek hız farkı gerçekten ihmal edilebilir.

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

Gördüğünüz gibi, edebi dizi başına 67,45ms hızlıdır:

ben 20 kere 10000000 bu sonuçları verdi aynı dizi 1, 2, 3, tanımlanmış olan Chrome 6'da bir speed test yaptım 10000000 dizi tanımları.

+0

soru da burada bilgisayar için daha hızlı ne koşmak – Yosef

+0

iken, 'Array' kurucu argümanlar farklı ne kadar var dayalı farklı davranır ilginç bir nokta, ben tamamen bir fark olarak listelemek için yanıltıcı olduğunu düşünüyorum bir dizi oluşturmanın iki yolu arasında karşılaştırma. '' '' '' argümanlar ile çağırdığınız bir yöntem değildir, 'var a =' test ''dır, bir' '' '' fonksiyonuna geçen dört argümandır. Bu, sadece boyutlar atama ile örtük olarak ilgilenen diziler yaratmak için bir sözdiziminden başka bir şey değildir. –

+3

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

1

thomas fuchs, slideshow numaralı telefonunda bu videonun altında ("dili kucaklama" sayfa 20): var arr = [] ve var obj = {} daha iyi ve biraz daha hızlıdır. Niçin emin değilim, ama yine de, oldukça ilginç bir slayt gösterisi var :)

1

Tipik bir programcı bakış açısıyla, var arr = new Array(); Tipik nesne somutlaşma hissini vermek için. Fakat javascriptte genellikle iyi uygulama örnekleri var arr = []; Şahsen, Harmen'in açıkladığı bir parametre hariç, her iki yolu kullanmada çok fazla fark görmüyorum.

Kontrol de bu link - http://yuiblog.com/blog/2006/11/13/javascript-we-hardly-new-ya/

İlgili konular