如何匹配Javascript中的空字典?

从节点REPL的东西,

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

鉴于我有一个空的字典,我怎么确定它是一个空的字典?

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

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

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

由于它没有属性, for循环将不会有任何东西来迭代。 为了在这里提供信用,我在这里find了这个build议。

 function isEmpty(ob){ for(var i in ob){ return false;} return true; } isEmpty({a:1}) // false isEmpty({}) // true 

这是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不是一个选项,只需创build一个单独的纯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 

如何使用jQuery?

 $.isEmptyObject(d) 

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

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

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

你必须检查它是这样的types的“对象”:

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

然后执行一个简短的“大小”函数来检查它是否为空, 如此处所述 。

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

这工作正常。

如果你在Node.js上使用这个代码,就可以在这里使用这段代码

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

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

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

不过,显然你不想在循环中将大对象串起来。