检查对象是否为空的最快方法是什么?

有没有比这更快更好的方法:

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}