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

var a = {};

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


当前回答

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

_.isEmpty({})//真

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

其他回答

要真正接受ONLY{},在Javascript中使用Lodash的最佳方法是:

_.isEmpty(value) && _.isPlainObject(value)

对于空对象,使用Object.keys(obj).length(如上面针对ECMA5+所建议的)要慢10倍!保持老学校的选择。

在Node、Chrome、Firefox和IE 9下测试,很明显,对于大多数使用情况:

(for…in…)是使用最快的选项!空对象的Object.keys(obj).length慢10倍JSON.stringify(obj).length总是最慢的(不令人惊讶)Object.getOwnPropertyNames(obj).length比Object.keys(obk)长。在某些系统上,长度可能更长。

就性能而言,使用:

function isEmpty(obj) { 
   for (var x in obj) { return false; }
   return true;
}

or

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

请参阅“对象为空吗?”中的详细测试结果和测试代码?

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

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

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

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

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

例如:

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

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

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