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

var a = {};

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


当前回答

除了Thevs的回答:

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

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

它是jquery+jquery.json

其他回答

这里有一个快速、简单的函数:

function isEmptyFunction () {
  for (const i in this) return false
  return true
}

作为getter实现:

Object.defineProperty(Object.prototype, 'isEmpty', { get: isEmptyFunction })

console.log({}.isEmpty) // true

作为单独的功能实现:

const isEmpty = Function.prototype.call.bind(isEmptyFunction)

console.log(isEmpty({})) // true

我们可以通过处理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({});//真的

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

创建扩展对象:

a = Object.extended({})

检查尺寸:

a.size()

纯Vanilla Javascript,完全向后兼容

函数isObjectDefined(Obj){如果(对象===null||对象类型!=='对象'||Object.pr原型.toString.call(Obj)==“[对象数组]”){return false}其他{for(对象中的var prop){if(对象hasOwnProperty(prop)){返回true}}返回JSON.stringify(Obj)!==JSON字符串({})}}console.log(isObjectDefined())//falseconsole.log(isObjectDefined(“”))//falseconsole.log(isObjectDefined(1))//falseconsole.log(isObjectDefined('string'))//falseconsole.log(isObjectDefined(NaN))//falseconsole.log(isObjectDefined(null))//falseconsole.log(isObjectDefined({}))//falseconsole.log(isObjectDefined([]))//falseconsole.log(isObjectDefined({a:“”}))//true

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

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

Object.keys不检索符号财产。