首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何判断对象是否为空?

如何判断对象是否为空?
EN

Stack Overflow用户
提问于 2011-10-03 22:56:20
回答 3查看 617关注 0票数 1

如果我使用以下命令设置对象:

代码语言:javascript
复制
var a = {};

代码语言:javascript
复制
var a = new Object();

如果我不知道具体要测试什么,我怎么测试它里面有没有东西。

(类似于== {},但这不能正确计算)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-03 22:58:16

你可以使用这个简单的函数:

代码语言:javascript
复制
function isEmpty(object) {
    for(var property in object) {
        if(object.hasOwnProperty(property))
            return false;
    }

    return true;
}

但是如果你使用jQuery:http://api.jquery.com/jQuery.isEmptyObject/

票数 4
EN

Stack Overflow用户

发布于 2011-10-03 23:21:22

这似乎是一个无害的问题,一个简单的解决方案,如@SiteSafeNL提供的解决方案似乎可以工作,但有一个实现错误,没有考虑到,IE {DontEnum} Bug

如果您的目标是IE8及以下版本,则需要实现类似以下内容:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

如果你想捕获不可枚举的own属性,我们需要另一种方法,这就是Object.getOwnPropertyNames方法存在的原因:

代码语言:javascript
复制
function isEmpty(obj) {
  return Object.getOwnPropertyNames(obj).length == 0;
}
票数 2
EN

Stack Overflow用户

发布于 2011-10-03 23:00:01

在ECMAScript 5中,您可以使用:

代码语言:javascript
复制
if (Object.keys(a).length === 0) {
    ...
}

注意:这将只查找可枚举的属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7636730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档