【问题标题】:Javascript trivia: check for equality against the empty objectJavascript琐事:检查空对象是否相等
【发布时间】:2010-02-26 09:16:03
【问题描述】:

可能与this question 重复。

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

我将 empty object 称为使用空对象字面量产生的对象,如:

 var o = {};

正如预期的那样,===== 都不起作用,因为以下两个语句

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

给假。

计算为空对象的表达式示例:

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

那么评估空对象的最短方法是什么?

【问题讨论】:

标签: javascript jquery html


【解决方案1】:
function isEmpty(o){
    for(var i in o){
        if(o.hasOwnProperty(i)){
            return false;
        }
    }
    return true;
}

【讨论】:

    【解决方案2】:

    您也可以使用Object.keys() 来测试一个对象是否为“空”:

    if (Object.keys(obj).length === 0) {
      // "empty" object
    } else {
      // not empty
    }
    

    【讨论】:

    【解决方案3】:

    你可以使用这个语法

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

    但这在 IE 中不起作用。作为“toSource()”方法的替代方法,可以使用 ajax 库的 JSON 编码:

    例如,

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

    jquery + jquery.json

    【讨论】:

      【解决方案4】:

      确定对象是否为空并没有真正的捷径,Javascript 创建一个对象并在内部自动添加 Object 的 constructorprototype 属性。

      您可以像这样创建自己的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】:
        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));
        

        【讨论】:

        • 这是非常不安全和缓慢的,没有充分的理由不安全和缓慢。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-30
        • 2017-08-06
        • 2019-11-04
        • 1970-01-01
        • 2022-08-22
        • 1970-01-01
        相关资源
        最近更新 更多