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

var a = {};

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


当前回答

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

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

其他回答

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

对于空对象,使用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;
}

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

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

_.isEmpty({})//真

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

完美的故障保护解决方案

我认为第一个被接受的解决方案在大多数情况下都有效,但不是故障保护。

更好的故障安全解决方案将是。

function isEmptyObject() { 
  return toString.call(obj) === "[object Object]" 
  && Object.keys(obj).length === 0;
}

或ES6/7

const isEmptyObject = () => toString.call(obj) === "[object Object]" 
  && Object.keys(obj).length === 0;

使用这种方法,如果obj设置为undefined或null,则代码不会中断。并返回null。

警告当心JSON的限制。

javascript:
  obj={  f:function(){}  };
  alert( "Beware!! obj is NOT empty!\n\nobj = {  f:function(){}  }" + 
               "\n\nJSON.stringify( obj )\n\nreturns\n\n" +
                        JSON.stringify( obj ) );

显示器

    Beware!! obj is NOT empty!

    obj = {  f:function(){}  }

    JSON.stringify( obj )

    returns

    {}