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

var a = {};

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


当前回答

检查值的新方法是if(Object.entries(this.props.myarticle).length==0){}

这里肌肉是物体

其他回答

任何类型的值都为空

/* eslint-disable no-nested-ternary */

const isEmpty = value => {
  switch (typeof value) {
    case 'undefined':
      return true;
    case 'object':
      return value === null
        ? true
        : Array.isArray(value)
        ? !value.length
        : Object.entries(value).length === 0 && value.constructor === Object;
    case 'string':
      return !value.length;
    default:
      return false;
  }
};

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

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

例如:

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

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

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

我们可以通过处理null或undefined检查来检查vanilla js,如下所示,

函数isEmptyObject(obj){回来obj&&Object.keys(obj).length==0&&obj.constructor==对象;}//测试isEmptyObject(new Boolean());//假的isEmptyObject(new Array());//假的isEmptyObject(新RegExp());//假的isEmptyObject(new String());//假的isEmptyObject(新数字());//假的isEmptyObject(new Function());//假的isEmptyObject(new Date());//假的isEmptyObject(空);//假的isEmptyObject(未定义);//假的isEmptyObject({});//真的

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

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

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

创建扩展对象:

a = Object.extended({})

检查尺寸:

a.size()