SORU
26 Aralık 2009, CUMARTESİ


JSLint hata 'için bir gövde bir kaplanmalı if' ne anlama geliyor?

Benim bir JavaScript dosyası JSLint kullandım. Hata attı:

for( ind in evtListeners ) {

Satır 41 de sorun karakter 9: bir vücut olmalıdır filtre ifadesi istenmeyen bir sarılmış prototip özellikleri.

Bu ne anlama geliyor?

CEVAP
26 Aralık 2009, CUMARTESİ


Öncelikleaslafor in bir döngü bir dizi sıralamak için kullanın. Asla. Kullanımı iyi for(var i = 0; i<arr.length; i ) eski.

Bu şudur arkasındaki nedeni: JavaScript her nesne özel bir alan prototype çağırdı. Eklediğiniz her şey bu alana o türün her nesne üzerinde erişilebilir olacak. Tüm diziler sıfır süzer serin bir yeni fonksiyonu filter_0 denen istediğinizi varsayalım.

Array.prototype.filter_0 = function() {
    var res = [];
    for (var i = 0; i < this.length; i  ) {
        if (this[i] != 0) {
            res.push(this[i]);
        }
    }
    return res;
};

console.log([0, 5, 0, 3, 0, 1, 0].filter_0());
//prints [5,3,1]

Bu nesneleri genişletmek ve yeni yöntemler eklemek için standart bir yoldur. Kütüphaneler bir sürü bu. Ancak, hadi for in şimdi nasıl işlediğine bir bakalım:

var listeners = ["a", "b", "c"];
for (o in listeners) {
    console.log(o);
}
//prints:
//  0
//  1
//  2
//  filter_0

Görüyor musun? Aniden filter_0 başka bir dizi dizini olduğunu düşünüyor. Tabii ki, gerçekten sayısal bir dizin değil, ama for in nesne alanları, yalnızca sayısal endeksleri arasında sıralar. Şimdi her sayısal dizin ile numaralandırma ediyoruzvefilter_0. Ama filter_0 belirli bir dizi nesnenin bir alan değil, her dizi nesnesi artık bu özellik var.

Neyse ki, tüm nesneler var hasOwnProperty yöntem, kontrol ederse bu alan, gerçekten ait olduğu nesnenin kendisi ya da eğer sadece miras gelen prototip zinciri ve böylece ait tüm nesnelerin türü.

for (o in listeners) {
    if (listeners.hasOwnProperty(o)) {
       console.log(o);
    }
}
 //prints:
 //  0
 //  1
 //  2

Bu kod beklendiği gibi diziler için çalışıyor olsa da, daha iyi bir yer, . not, ^strong>asladiziler for in for each in kullanın. for in bir nesne, dizi dizinleri veya değerleri alanlarında sıralar unutmayın.

var listeners = ["a", "b", "c"];
listeners.happy = "Happy debugging";

for (o in listeners) {
    if (listeners.hasOwnProperty(o)) {
       console.log(o);
    }
}

 //prints:
 //  0
 //  1
 //  2
 //  happy

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Awesomesauce Network

    Awesomesauce

    4 EKİM 2012
  • Digital Bounds

    Digital Boun

    19 Temmuz 2013
  • kimberly p

    kimberly p

    23 Ocak 2010