2009-05-19 15 views
36

, buVar x = new Array(); JSLint yılında

var x = new Array(); 

(Bu gerçek bir değişken ismi değil)

var result = []; 

1 sözdizimi nesi var olması gerektiği konusunda uyarıyor? Önerinin arkasındaki mantık nedir?

+2

1. sözdiziminde yanlış bir şey yok. İkincisi sadece daha kısa. –

cevap

26

Crockford doesn't like new. Bu nedenle, mümkün olduğunda JSLint expects you to avoid it. Ve yeni bir dizi nesnesi oluşturmak new kullanmadan mümkündür ....

+3

Ancak jslint sonları bir dizi başlatmak çalıştığınızda n değerleri ile.Örneğin: var x = yeni Array (20); Bu yaratma metodu sıklıkla kullanılmaz, ancak onun durumları vardır ve bir dizi oluşturmak ve doldurmak için bir döngü kullanmaktan çok daha hızlıdır. –

+3

n'th elemanını undefined olarak ayarlayabilir ve az çok aynı şeyi yapar – mikelikespie

+7

Bir diziyi bildirimde belirli bir boyuta getirmeye gerek yoktur. JavaScript dizileri C dizileri gibi değildir. Nesneler, statik boyutlar değil, bitişik bellek parçalarıdır. Bu nedenle, değerleri dizinize eklemeniz yeterlidir. Aslında deklarasyonda başlayabilmek için * daha yavaş * olabilir ve daha sonra doldurulur, çünkü bildirim zamanında, tüm n anahtarının karıĢtırılması gerekir, daha sonra atandığı değere göre, yeniden değerlendirilmeleri gerekebilir. –

69

O new Array() kullanmaktır daha aslında JavaScript Array değerini geçersiz kılabilir çünkü [] kullanmak daha güvenlidir: Başka bir deyişle

Array = function() { }; 

var x = new Array(); 
// x is now an Object instead of an Array. 

, [] belirsiz değildir.

+0

Bir örnek verebilir misiniz? – TStamper

+0

İyi nokta! Array'ın geçersiz kılınmasının, kodda Array.prototype yöntemlerini argüman gibi dizi benzeri nesneler üzerinde kullanmaya çalışan ciddi sorunlara yol açacağını unutmayın. Bu yüzden hala çok kötü bir fikir. – Shog9

+2

Sadece bu değil, Array() yapıcısında, ne kadar argüman geçtiğine bağlı olarak bazı "garip" davranışları vardır. Bu sadece ilginç ve en iyi kaçınılmaz. –

2

İlk sözdiziminde yanlış bir şey yok. Aslında, w3schools'da, bir dizi oluşturmanın yolu olarak new Array() listelenir. Sorun şu ki bu "eski yol". "Yeni yol", [] daha kısadır ve ["foo", "bar"]'da olduğu gibi dizideki değerleri başlatmanıza izin verir. Çoğu geliştirici []'u new Array()'a iyi stil açısından tercih eder.

+1

Neden bu durum reddedildi? –

+19

muhtemelen w3 okulları w3.org ile ilişkili olmadığından ve genellikle yanlış veya yanlış kodlara sahip olduklarından. –

+0

@AndrewAustin True. İnterweb'lerde, genel bir kural olarak, bilgiyi nereden aldığınıza bakılmaksızın kaynakları iki kez kontrol etmelisiniz. Bilim için – Tivie

4

formu ya hiç bir sorun yok, ama mümkün-

var s = '' var s = new String() den daha doğru değil her yerde genellikle kullanılan değişmezleri bkz ....

7

Kullandığınız ve tarayıcınıza veya ortamınıza bağlı olarak farklı bir performans elde edebileceğiniz gibi görünüyor:

http://jsperf.com/new-array-vs-literal/11 ([1, .2] vs new Array (1, .2)) literal yoldur bu durumda daha hızlı. Yeni Dizi daha hızlı krom V21 ise ne yaptığın bağlı olarak) yaklaşık% 7 veya% 30 oranında bu test için görünüyor

http://jsperf.com/new-array-vs-literal/7 ([] .length (500000) vs yeni Array (500000)).

+4

+1! –

+1

+1, çünkü ölçütler genellikle bakış açısına bir şeyler koymaya yardımcı olur – Tivie