对象是空的吗?
这个问题在这里已经有了答案:
我假设你的意思是“没有属性”。
// Speed up calls to hasOwnProperty
var hasOwnProperty = Object.prototype.hasOwnProperty;
function isEmpty(obj) {
// null and undefined are "empty"
if (obj == null) return true;
// Assume if it has a length property with a non-zero value
// that that property is correct.
if (obj.length > 0) return false;
if (obj.length === 0) return true;
// If it isn't an object at this point
// it is empty, but it can't be anything *but* empty
// Is it empty? Depends on your application.
if (typeof obj !== "object") return true;
// Otherwise, does it have any properties of its own?
// Note that this doesn't handle
// toString and valueOf enumeration bugs in IE < 9
for (var key in obj) {
if (hasOwnProperty.call(obj, key)) return false;
}
return true;
}
例子:
isEmpty(""), // true
isEmpty(33), // true (arguably could be a TypeError)
isEmpty([]), // true
isEmpty({}), // true
isEmpty({length: 0, custom_property: []}), // true
isEmpty("Hello"), // false
isEmpty([1,2,3]), // false
isEmpty({test: 1}), // false
isEmpty({length: 3, custom_property: [1,2,3]}) // false
如果您只需要处理ECMAScript5浏览器,则可以使用Object.getOwnPropertyNames
而不是hasOwnProperty
循环:
if (Object.getOwnPropertyNames(obj).length > 0) return false;
这将确保即使对象仅具有非枚举属性, isEmpty
仍然会为您提供正确的结果。
对于ECMAScript5(尽管在所有浏览器中都不支持),您可以使用:
Object.keys(obj).length === 0
编辑 :这个答案已被弃用,除非你出于某种原因不能使用ES5解决方案。 请注意,ES5支持现在很普遍,即使不支持,也可以使用Babel。 YMMV当然。
简单和跨浏览器的方式是使用jQuery.isEmptyObject
:
if ($.isEmptyObject(obj))
{
// do something
}
更多:http://api.jquery.com/jQuery.isEmptyObject/
不过你需要jquery。
链接地址: http://www.djcxy.com/p/31739.html上一篇: Is object empty?