代码之家  ›  专栏  ›  技术社区  ›  flybywire

javascript琐事:检查空对象是否相等

  •  9
  • flybywire  · 技术社区  · 14 年前

    可能是 this question .

    愚蠢的javascript问题:我想检查一个对象是否是emtpy对象。

    我打电话 空对象 使用空对象文本产生的对象,如:

     var o = {};
    

    不出所料 == 也不 === 工作,如下所述

     alert({}=={});
     alert({}==={});
    

    给假。

    表达式示例 对空对象求值:

    • 0
    • ""
    • {a:"b"}
    • []
    • new function(){}

    那么,对空对象求值的最短方法是什么?

    5 回复  |  直到 11 年前
        1
  •  17
  •   Li0liQ    14 年前
    function isEmpty(o){
        for(var i in o){
            if(o.hasOwnProperty(i)){
                return false;
            }
        }
        return true;
    }
    
        2
  •  11
  •   Jan Hančič    11 年前

    你也可以使用 Object.keys() 要测试对象是否为“空”:

    if (Object.keys(obj).length === 0) {
      // "empty" object
    } else {
      // not empty
    }
    
        3
  •  2
  •   starikovs    14 年前

    您可以使用以下语法

    if (a.toSource() === "({})")
    

    但这在ie中不起作用。作为“toSource()”方法的替代方法,可以使用ajax库的encode to json:

    例如,

    var o = {};
    alert($.toJSON(o)=='{}'); // true
    
    var o = {a:1};
    alert($.toJSON(o)=='{}'); // false
    

    jquery+jquery.json

        4
  •  0
  •   Buhake Sindi Tesnep    14 年前

    如果javascript创建一个对象并在内部添加 constructor prototype 对象的属性。

    你可以自己创造 isEmpty() 方法如下:

    var obj={}
    Object.prototype.isEmpty = function() {
        for (var prop in this) {
            if (this.hasOwnProperty(prop)) return false;
        }
        return true;
    };
    alert(obj.isEmpty());
    

    因此,如果任何对象具有任何属性,则该对象不为空,否则返回true。

        5
  •  0
  •   Ekim    13 年前
    javascript:
         cs = 'MTobj={   }; JSON.stringify(MTobj)=="{}"';
         alert(cs+'  is  '+eval(cs));
         cs = 'MTnot={a:2}; JSON.stringify(MTnot)=="{}"';
         alert(cs+'  is  '+eval(cs));
    

    MTobj={   }; JSON.stringify(MTobj)=="{}"  is  true
    MTnot={a:2}; JSON.stringify(MTnot)=="{}"  is  false
    

    警告!当心!可能有误报!

    javascript:
         cs = 'MTobj={ f:function(){} }; JSON.stringify(MTobj)=="{}"';
         alert(cs+'  is  '+eval(cs));
         alert("The answer is wrong!!\n\n"+
                        (cs="JSON.stringify({ f:function(){} })")+
                                 "\n\n  returns\n\n"+eval(cs));