在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
当前回答
这一行代码也有助于回退到较旧的浏览器。
var a = {}; //if empty returns false
(Object.getOwnPropertyNames ? Object.getOwnPropertyNames(a).length !== 0 : (function(){ for(var key in a) break; return !!key })()) //Returns False
var a = {b:2}; //if not empty returns true
(Object.getOwnPropertyNames ? Object.getOwnPropertyNames(a).length !== 0 : (function(){ for(var key in a) break; return !!key })()) //Returns true
Object.getOwnPropertyNames在ECMA-5中实现。上面的行在具有回退功能的旧浏览器中工作。
另一个快速解决方案是检查Object.keys、Object.entries或Object.values
知识文章:关注这篇SO文章,了解Object.keys与Object.getOwnPropertyNames之间的详细区别
其他回答
我的看法:
函数isEmpty(obj){return Object.keys(obj).length==0;}变量a={a: 1中,b: 2个}变量b={}console.log(isEmpty(a));//假的console.log(isEmpty(b));//真的
只是,我认为目前并不是所有浏览器都实现Object.keys()。
纯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
警告当心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 {}
这就是我想到的,用来判断对象中是否有任何非空值。
function isEmpty(obj: Object): Boolean {
for (const prop in obj) {
if (obj.hasOwnProperty(prop)) {
if (obj[prop] instanceof Object) {
const rtn = this.isEmpty(obj[prop]);
if (rtn === false) {
return false;
}
} else if (obj[prop] || obj[prop] === false) {
return false;
}
}
}
return true;
}
您可以使用Undercore.js。
_.isEmpty({}); // true