如果我設置使用對象:如何判斷對象是否爲空?
var a = {};
或
var a = new Object();
我怎樣才能測試它是否具有裏面任何東西,如果我不知道具體要測試什麼。
(有點像== {},但這並不能正確地評價)
如果我設置使用對象:如何判斷對象是否爲空?
var a = {};
或
var a = new Object();
我怎樣才能測試它是否具有裏面任何東西,如果我不知道具體要測試什麼。
(有點像== {},但這並不能正確地評價)
你可以使用這個簡單的功能:
function isEmpty(object) {
for(var property in object) {
if(object.hasOwnProperty(property))
return false;
}
return true;
}
但是,如果你使用jQuery:http://api.jquery.com/jQuery.isEmptyObject/
完美! JS方法和以前我不熟悉的jQuery方法都很好。謝謝! – Maxx
這似乎是一個無辜的問題,一個簡單的解決方案就像@SiteSafeNL提供的一個簡單的解決方案似乎可以工作,但是存在一個實施錯誤,並不考慮在內,IE {DontEnum} Bug。
如果你的目標IE8及以下你將需要實現這樣的事情:
var isEmpty = (function() {
var hasOwn = Object.prototype.hasOwnProperty,
hasDontEnumBug = !{toString:0}.propertyIsEnumerable("toString"),
dontEnums = ['toString', 'toLocaleString',
'valueOf', 'hasOwnProperty',
'isPrototypeOf', 'propertyIsEnumerable',
'constructor'];
return function (o) {
for (var p in o) {
if (hasOwn.call(o, p))
return false
}
if (hasDontEnumBug) { // IE8 and below
var i = dontEnums.length;
while(i--) {
if (hasOwn.call(o, dontEnums[i]))
return false;
}
}
return true;
};
})();
現在實現的ECMAScript 5作爲@Alnitak提到你可以使用Object.keys
現代瀏覽器,但在ES5現在我們有限定非枚舉的屬性的功率,這些特性將不會出現在for-in
環,如果需要檢測它們,必須使用替代方法,例如,使用上述功能,或Object.keys
:
var obj = Object.create(null, { foo: { value: 1, /* enumerable:false... */} });
isEmpty(obj); // true
Object.keys(obj).length; // 0
// But the property exists:
obj.hasOwnProperty('foo'); // true
obj.foo; // 1
我們需要另一種方法,如果你想趕上不可枚舉自己的屬性,這就是爲什麼Object.getOwnPropertyNames
方法存在:
function isEmpty(obj) {
return Object.getOwnPropertyNames(obj).length == 0;
}
如果你的目標IE8及以下檢查我的回答,接受的答案不參與帳戶IE的DontEnum錯誤...乾杯! – CMS