在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:

var a = {};

我该如何检查是否是这种情况?


当前回答

我能找到的最佳单线解决方案(已更新):

isEmpty=obj=>!Object.values(obj).filter(e=>类型e!=='undefined').length;console.log(isEmpty({}))//trueconsole.log(isEmpty({a:undefined,b:undefine}))//trueconsole.log(isEmpty({a:undefined,b:void 1024,c:void 0}))//trueconsole.log(isEmpty({a:[undefined,undefined]}))//falseconsole.log(isEmpty({a:1}))//falseconsole.log(isEmpty({a:“”}))//falseconsole.log(isEmpty({a:null,b:undefined}))//false

其他回答

除了Thevs的回答:

var o = {};
alert($.toJSON(o)=='{}'); // true

var o = {a:1};
alert($.toJSON(o)=='{}'); // false

它是jquery+jquery.json

您可以使用lodash库而不是创建一个简单的JS函数。

_.isEmpty({})//真

这将检查数组和对象是否有值并返回布尔值。

Sugar.JS为此提供了扩展对象。代码简洁明了:

创建扩展对象:

a = Object.extended({})

检查尺寸:

a.size()

如果ECMAScript 5支持可用,则可以使用Object.keys():

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

对于ES3和更高版本,没有简单的方法可以做到这一点。您必须显式循环财产:

function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }

    return true;
}
if(Object.getOwnPropertyNames(obj).length === 0){
  //is empty
}

看见http://bencollier.net/2011/04/javascript-is-an-object-empty/