JavaScript nesne algılama: sözdizimi karşı '' anahtar nokta
Bir UA belirli JS özelliğini uygular olup olmadığını belirlemek için iki yol gördüm: if(object.property) if('property' in object).
Hangisi daha iyi olur fikirlerini duymak isterim, ve en önemlisi, neden. Biri diğerinden daha su götürmez bir şekilde daha mı iyi? Daha fazla nesne özelliği tespiti yapmak için sadece bu iki yolu vardır? Tarayıcı desteği, tuzaklar, yürütme hızı, ve gibi, estetik yerine kapak lütfen.
Düzenleme:Okuyucular jsperf.com/object-detection testi yapmak için teşvik edilir
CEVAP
if(object.property)başarısız durumlarda ayarlı değil (ne istiyorsun) ve davalar ayarlanmış bazı false değeri, örneğin
undefined,null,0vb (ne istiyorsun).var object = {property: 0}; if(object.property) { ... } // will not runif('property' in object)aslında bir nesne, özellik, değer bakmıyorum olup olmadığını döndürür beri biraz daha iyi.
var object = {property: 0}; if('property' in object) { ... } // will run if('toString' in object) { ... } // will also run; from prototypeif(object.hasOwnProperty('property'))seni örnek özellikleri ve prototip özellikleri birbirinden ayırmak için izin verir bu yana daha iyi.
var object = {property: 0}; if(object.hasOwnProperty('property')) { ... } // will run if(object.hasOwnProperty('toString')) { ... } // will not run
Performans zaman binlerce ikinci bir kontrol ettiğin sürece bir sorun o kadar büyük değil burada derdim ama bu durumda başka bir kod yapısı göz önünde bulundurmalısınız. /Sözdizimi yeni tarayıcılar tarafından desteklenmektedir, hasOwnProperty etrafında uzun bir süre oldu.
Düzenleme:Ayrıca genel bir fonksiyon bir şey (olmayan şeyleri bile nesneler) geçerek bir mal varlığını denetlemek için bu gibi bir nesne olarak yapabilirsiniz:
function has(obj, prop) {
return Object.prototype.hasOwnProperty.call(obj, prop);
}
Şimdi bu gibi çalışır:
has(window, 'setTimeout'); // true
window.hasOwnProperty === undefined IE sürüm 8 veya daha düşük olan) bile.

EÄŸer anahtar kontrol JavaScript bir ne...
Nasıl "bu" JavaScript bir ne...
Karşı benzersiz nesne bileşik birincil...
'' JavaScript anahtar kelime...
JQuery ile JavaScript nesne için form ...