2011-05-20 39 views
38

从节点REPL的东西,如何匹配Javascript中的空字典?

> d = {} 
{} 
> d === {} 
false 
> d == {} 
false 

假设我有一个空的字典,我如何确保它是一个空的字典?

+1

你可能会考虑使用一个库,例如[check-types](https://www.npmjs.com/package/check-types)。在这种情况下,你可以使用'check.emptyObject(d)'。 – mareoraft 2015-10-29 00:36:27

回答

45
function isEmpty(obj) { 
    return Object.keys(obj).length === 0; 
} 
+1

仅适用于较新的浏览器。为了记录,keys属性仅在IE> = 9 [参考](http://kangax.github.io/compat-table/es5/) – 2014-12-09 04:52:57

10

由于它没有属性,for循环将没有任何东西可以迭代。为了在应有的地方给予奖励,我发现这个建议here

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

isEmpty({a:1}) // false 
isEmpty({}) // true 
+1

我会创建一个count(obj)函数,如果count等于0,isEmpty会被评估。 – 2011-05-20 13:34:30

+5

您可能想在返回false之前检查'obj.hasOwnProperty(i)'。这会过滤掉通过原型链继承的属性。 – 2011-05-20 13:36:38

1

你得检查,这是类型的“对象”的,像这样:

(typeof(d) === 'object')

,然后实现短的“大小”功能来检查它是空的,as mentioned here

19

你可以用这种方法isEmpty扩展Object.prototype检查对象是否已经没有自己的属性:

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

Wow ..中支持。我觉得JavaScript很有趣,它缺少这种“基本”功能 – harijay 2011-10-12 22:28:57

+1

扩展Object.prototype可能会产生迭代对象的问题http://yuiblog.com/blog/2006/09/26/for-in-intrigue/ – 2014-06-12 14:22:19

+0

这干扰了jquery – 2014-12-24 10:14:06

0

如果您试穿一下Node.js的使用这个片段,在此基础上的代码here

Object.defineProperty(Object.prototype, "isEmpty", { 
    enumerable: false, 
    value: function() { 
      for (var prop in this) if (this.hasOwnProperty(prop)) return false; 
      return true; 
     } 
    } 
); 
8

这就是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 

如果包含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 
9

如何使用jQuery?

$.isEmptyObject(d) 
2

我远离JavaScript学者,但做了以下工作吗?

if (Object.getOwnPropertyNames(d).length == 0) { 
    // object is empty 
} 

它具有作为单线纯函数调用的优点。

+0

很酷的解决方案!它实际上是唯一没有循环且没有调用第三方库的程序 – 2015-12-27 13:18:25

1
var SomeDictionary = {}; 
if(jQuery.isEmptyObject(SomeDictionary)) 
// Write some code for dictionary is empty condition 
else 
// Write some code for dictionary not empty condition 

这工作正常。

0

如果性能是不是一个考虑因素,这是一个简单的方法,很容易记住:

JSON.stringify(obj) === '{}' 

显然,你不想成为一个循环字符串化大型对象,虽然。