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

var a = {};

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


当前回答

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

_.isEmpty({})//真

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

其他回答

使用JSON.stringify怎么样?它几乎可以在所有现代浏览器中使用。

function isEmptyObject(obj){
    return JSON.stringify(obj) === '{}';
}

除了Thevs的回答:

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

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

它是jquery+jquery.json

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

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

尝试解构

const a = {};
const { b } = a;
const emptryOrNot = (b) ? 'not Empty' : 'empty';
console.log(emptryOrNot)

正确答案是:

function isEmptyObject(obj) {
  return (
    Object.getPrototypeOf(obj) === Object.prototype &&
    Object.getOwnPropertyNames(obj).length === 0 &&
    Object.getOwnPropertySymbols(obj).length === 0
  );
}

这将检查:

对象的原型完全是object.prototype。该对象没有自己的财产(无论可枚举性如何)。对象没有自己的属性符号。

换句话说,该对象与使用{}创建的对象无法区分。