SORU
25 EYLÜL 2008, PERŞEMBE


Nasıl bir nesne JavaScript özelliği olup olmadığını kontrol edebilirim?

Nasıl bir nesne JavaScript property varsa kontrol edebilirim?

Düşünün:

x = {'key': 1};
if ( x.hasOwnProperty('key') ) {
    //Do this
}

Bunu en iyi şekilde yapmak için?

CEVAP
25 EYLÜL 2008, PERŞEMBE


Gerçekten verilen cevaplar kafamı karıştırdı çoğu da sadece düpedüz yanlıştır. Tabii ki tanımsız, null veya false değeri olan nesne özellikleri olabilir. Bu yüzden sadece typeof this[property] ya da, daha kötüsü, x.key özellik kontrol azaltarak tamamen yanıltıcı sonuçlar verecektir.

Aradığınız şeye bağlı. Eğer bir nesnenin fiziksel bir özelliği varsa bilmek istiyorum (ve bir yerden prototip zincirinde gelmiyor) sonra object.hasOwnProperty gitmek için bir yoldur. Tüm modern tarayıcılar destekler. (Safari eski sürümü 2.0.1 ve üzeri eksikti - ama bu tarayıcı sürümleri nadiren daha fazla kullanılır.)

Eğer ne aradığınızı ise bir nesnenin bir özelliği, öyle mi iterable (zaman üzerinde yineleme özellikleri olan nesne, görünür) o zaman ne: prop in object size istediğiniz efekti.

Yana kullanarak hasOwnProperty istediğiniz şey muhtemelen budur, ve bir geri dönüş yöntemi isteyebilirsiniz olduğunu dikkate alarak, aşağıdaki çözüm sunuyorum:

var obj = {
    a: undefined,
    b: null,
    c: false
};

// a, b, c all found
for ( var prop in obj ) {
    document.writeln( "Object1: "   prop );
}

function Class(){
    this.a = undefined;
    this.b = null;
    this.c = false;
}

Class.prototype = {
    a: undefined,
    b: true,
    c: true,
    d: true,
    e: true
};

var obj2 = new Class();

// a, b, c, d, e found
for ( var prop in obj2 ) {
    document.writeln( "Object2: "   prop );
}

function hasOwnProperty(obj, prop) {
    var proto = obj.__proto__ || obj.constructor.prototype;
    return (prop in obj) &&
        (!(prop in proto) || proto[prop] !== obj[prop]);
}

if ( Object.prototype.hasOwnProperty ) {
    var hasOwnProperty = function(obj, prop) {
        return obj.hasOwnProperty(prop);
    }
}

// a, b, c found in modern browsers
// b, c found in Safari 2.0.1 and older
for ( var prop in obj2 ) {
    if ( hasOwnProperty(obj2, prop) ) {
        document.writeln( "Object2 w/ hasOwn: "   prop );
    }
}

Yukarıdaki bir çalışma, çapraz tarayıcı, çözüm için hasOwnProperty ile bir uyarı: Bu mümkün ayırt edebilmek durumlarda, eşdeğer bir mülk üzerinde prototip ve örnek - sadece varsayar geliyor, prototip. Daha yumuşak ya, senin durum üzerine sıkı göre vardiya olabilir, ama en azından bu daha yararlı olmalıdır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gamingbits

    gamingbits

    2 Mayıs 2006
  • NPR

    NPR

    22 NİSAN 2006
  • Phandroid

    Phandroid

    26 Ocak 2009