如何在Javascript中匹配空字典?

Joã*_*imo 56 javascript dictionary match

从节点REPL的事情,

> d = {}
{}
> d === {}
false
> d == {}
false
Run Code Online (Sandbox Code Playgroud)

鉴于我有一个空字典,我如何确保它是一个空字典?

Ray*_*nos 76

function isEmpty(obj) {
  return Object.keys(obj).length === 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果我现在还没有那么习惯的话,我会对 JavaScript 缺乏这种基本功能感到惊讶。 (7认同)

Gum*_*mbo 19

您可以Object.prototype使用此isEmpty方法进行扩展,以检查对象是否没有自己的属性:

Object.prototype.isEmpty = function() {
    for (var prop in this) if (this.hasOwnProperty(prop)) return false;
    return true;
};
Run Code Online (Sandbox Code Playgroud)

  • 哇..我觉得javascript缺乏这种"基本"功能相当有趣 (27认同)
  • 扩展Object.prototype可能会在以后迭代该对象时产生问题,网址为http://yuiblog.com/blog/2006/09/26/for-in-intrigue/ (2认同)

str*_*roz 15

使用jQuery怎么样?

$.isEmptyObject(d)
Run Code Online (Sandbox Code Playgroud)


Dav*_*tka 10

由于它没有属性,for循环不会有任何迭代.为了给予应有的信用,我在这里找到了这个建议.

function isEmpty(ob){
   for(var i in ob){ return false;}
  return true;
}

isEmpty({a:1}) // false
isEmpty({}) // true
Run Code Online (Sandbox Code Playgroud)

  • 你可能想在返回false之前检查`obj.hasOwnProperty(i)`.这会过滤掉通过原型链继承的属性. (5认同)

cev*_*ris 9

这是jQuery使用的,工作得很好.虽然这确实需要jQuery脚本使用isEmptyObject.

isEmptyObject: function( obj ) {
    for ( var name in obj ) {
        return false;
    }
    return true;
}

//Example
var temp = {};
$.isEmptyObject(temp); // returns True
temp ['a'] = 'some data';
$.isEmptyObject(temp); // returns False
Run Code Online (Sandbox Code Playgroud)

如果包含jQuery不是一个选项,只需创建一个单独的纯JavaScript函数.

function isEmptyObject( obj ) {
    for ( var name in obj ) {
        return false;
    }
    return true;
}

//Example
var temp = {};
isEmptyObject(temp); // returns True
temp ['b'] = 'some data';
isEmptyObject(temp); // returns False
Run Code Online (Sandbox Code Playgroud)


Ste*_*ett 5

我距离JavaScript学者还很远,但是以下工作有效吗?

if (Object.getOwnPropertyNames(d).length == 0) {
   // object is empty
}
Run Code Online (Sandbox Code Playgroud)

它的优点是可以作为一行纯函数调用。