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

var a = {};

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


当前回答

如果您使用更新的浏览器,有一个简单的方法。对象.keys(obj).length==0

其他回答

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

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

从jQuery 1.4开始,isEmptyObject()方法检查对象本身的财产和从原型继承的财产(因为它不使用hasOwnProperty)。参数应该始终是一个普通的JavaScript对象,因为其他类型的对象(DOM元素、原始字符串/数字、宿主对象)可能不会在浏览器中提供一致的结果。要确定对象是否为纯JavaScript对象,请使用$.isPlainObject()。

jQuery.isPlainObject({}) // true

jQuery.isPlainObject( "test" ) // false

Jquery api

老问题,但只是有问题。如果您的唯一目的是检查对象是否为空,那么包含JQuery并不是一个好主意。相反,只需深入JQuery的代码,就会得到答案:

function isEmptyObject(obj) {
    var name;
    for (name in obj) {
        if (obj.hasOwnProperty(name)) {
            return false;
        }
    }
    return true;
}

我知道这并不能100%回答你的问题,但我以前也遇到过类似的问题,下面是我如何解决这些问题:

我有一个可能返回空对象的API。因为我知道从API中需要哪些字段,所以我只检查是否存在任何必需的字段。

例如:

API返回{}或{agentID:“1234”(必需),地址:“1234通道”(可选),…}。在我的调用函数中,我只检查

if(response.data && response.data.agentID) { 
  do something with my agentID 
} else { 
  is empty response
}

这样,我就不需要使用那些昂贵的方法来检查对象是否为空。如果对象没有agentID字段,则调用函数的对象将为空。

export function isObjectEmpty(obj) {
  return (
    Object.keys(obj).length === 0 &&
    Object.getOwnPropertySymbols(obj).length === 0 &&
    obj.constructor === Object
  );
}

这包括检查包含符号财产的对象。

Object.keys不检索符号财产。