是否有一种更简单的方法来查看对象是否为空?

时间:2014-02-12 21:25:52

标签: javascript

当然可以做到:

var obj = {};
if(Object.keys(obj).length == 0)

但我很好奇是否有办法说:

var obj = {};
if(obj.hasKeys())

甚至:

//already tested, and this doesnt work.  its true because it *is* something.
var obj = {};
if(!obj)

5 个答案:

答案 0 :(得分:4)

function hasKeys(o) {
    for (var name in o)
        if (o.hasOwnProperty(name))
            return true;
    return false;
}

答案 1 :(得分:3)

这将检测可枚举的属性,is inherited from the Object.prototype就像你的例子一样:

Object.defineProperty(Object.prototype, "hasKeys", {
    configurable: true,
    value: function() {
        for (var _ in this) return true;
        return false;
    }
});

要检测不可枚举的属性,您必须使用Object.getOwnPropertyNames

答案 2 :(得分:1)

最好创建一个函数并在需要时调用它:

function isObjectEmpty(object) {
 for(var i in object) 
  if(object.hasOwnProperty(i))
    return false;

  return true;
}

至少使用这个方法名称,你和你的同伴,可以清楚地看到你正在测试对象的内容。

答案 3 :(得分:1)

没有让你成为自己的功能,你可以至少使用更短的语法,这要归功于JS的强制攻击能力:

if( Object.keys({})[0] ) alert("non-empty object");

这种死亡简单方法的唯一警告是,如果您确实想要检测继承或计算属性,或者如果您以某种方式拥有一个带有空键的对象,那么(希望)非常罕见。例如:{“”:0} ......

注意:我改变了我的原始答案,使其更具可读性。

答案 4 :(得分:0)

没有。你可以让它工作......

Object.prototype.hasKeys = function () {
  return Object.keys(this).length > 0
}

......但你不应该;在JavaScript中修改内置类的原型是一个非常糟糕的主意。你最好只编写像is_empty(obj)这样的实用工具方法,或者使用已经提供类似功能的库,例如Underscore的isEmpty或jQuery的isEmptyObject