Nasıl itiraz JavaScript herhangi bir özellikleri olup olmadığını kontrol etmek için?
İlan ediyorum varsayarsak
var ad = {};
Nasıl bu nesne kullanıcı tanımlı özellikler içeren herhangi bir olup olmadığını kontrol edebilir miyim?
CEVAP
Ne basit bir fonksiyon yapmaya ne dersiniz?
function isEmptyObject(obj) {
for(var prop in obj) {
if (Object.prototype.hasOwnProperty.call(obj, prop)) {
return false;
}
}
return true;
}
isEmptyObject({}); // true
isEmptyObject({foo:'bar'}); // false
Doğrudan arama Object.prototype
hasOwnProperty
yöntem sadece biraz daha ekleyingüvenlikhayal obj.hasOwnProperty(...)
normal bir telefon kullanarak aşağıdaki
isEmptyObject({hasOwnProperty:'boom'}); // false
Not:for...in
ifadesi kullanır, ve bu ifade, sadece üzerinde dolaşırsayısızözellikleri, yaygın olarak uygulanan ve şu anda en ECMA Standardı (3rd edition) programcı olmayan sayısız özellikleri oluşturmak için herhangi bir yolu yok.
Ancak bu şimdi ECMAScript 5th Edition ile değişti ve olmayan sayısız, yazılabilir olmayan veya non-deletable Özellikleri, Bu yüzden yukarıdaki yöntem oluşturmak edebiliyoruzbaşarısız olabilirörneğin:
var obj = {};
Object.defineProperty(obj, 'test', { value: 'testVal',
enumerable: false,
writable: true,
configurable: true
});
isEmptyObject(obj); // true, wrong!!
obj.hasOwnProperty('test'); // true, the property exist!!
Bu sorun için ECMA 5 bir çözümdür:
function isEmptyObject(obj) {
return Object.getOwnPropertyNames(obj).length === 0;
}
Object.getOwnPropertyNames
yöntem adlarını içeren Array
döndürürtümmülkleri varbir nesne,sayısız yabu yöntem artık tarayıcı üreticileri tarafından uygulanmakta olup , zaten Chrome 5 Beta ve son Y Gece Kurar.
Object.defineProperty
ayrıca tarayıcı ve en son bu Firefox 3.7 Alpha sürümleri mevcuttur.
Java eğer herhangi bir sonuç olup olma...
Nasıl kullanarak/Catch olmadan bir diz...
Nasıl bir elementin JavaScript ile ger...
Nasıl iki dizide JavaScript ile eşit o...
Eğer listedeki herhangi bir yinelenen ...