检查对象是否为空的最快方法是什么?
有没有比这更快更好的方法:
function count_obj(obj){
var i = 0;
for(var key in obj){
++i;
}
return i;
}
检查对象是否为空的最快方法是什么?
有没有比这更快更好的方法:
function count_obj(obj){
var i = 0;
for(var key in obj){
++i;
}
return i;
}
当前回答
function isEmpty( o ) {
for ( var p in o ) {
if ( o.hasOwnProperty( p ) ) { return false; }
}
return true;
}
其他回答
if (Object.getOwnPropertyNames(obj1).length > 0)
{
alert('obj1 is empty!');
}
下划线和lodash都有一个方便的isEmpty()函数,如果你不介意添加一个额外的库的话。
_.isEmpty({});
优雅的方式——使用钥匙
var myEmptyObj = {};
var myFullObj = {"key":"value"};
console.log(Object.keys(myEmptyObj).length); //0
console.log(Object.keys(myFullObj).length); //1
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
很惊讶在这么一个基本的JS问题上看到这么多弱的答案…上面的答案也不好,原因如下:
它生成一个全局变量 在未定义时返回true 用途……它本身非常慢 函数内部为…在是无用的-返回false没有hasOwnProperty魔法将工作良好
事实上,有一个更简单的解决方案:
function isEmpty(value) {
return Boolean(value && typeof value === 'object') && !Object.keys(value).length;
}
快速联机'dictionary'-objects:
function isEmptyDict(d){for (var k in d) return false; return true}