在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
当前回答
isEmpty = function(obj) {
if (obj == null) return true;
if (obj.constructor.name == "Array" || obj.constructor.name == "String") return obj.length === 0;
for (var key in obj) if (isEmpty(obj[key])) return true;
return false;
}
这将检查字符串、数组或对象(映射)的空性。
用法:
var a = {"a":"xxx","b":[1],"c":{"c_a":""}}
isEmpty(a); // true, because a.c.c_a is empty.
isEmpty("I am a String"); //false
其他回答
你最想知道的是,在使用对象之前,它是否有财产。因此,不要询问isEmpty,然后总是检查if(!isEmption(obj))之类的否定,你可以只测试对象是否为null,是否有财产
export function hasProperties(obj): boolean {
return obj && obj.constructor === Object && Object.keys(obj).length >= 1;
}
我知道这并不能100%回答你的问题,但我以前也遇到过类似的问题,下面是我如何解决这些问题:
我有一个可能返回空对象的API。因为我知道从API中需要哪些字段,所以我只检查是否存在任何必需的字段。
例如:
API返回{}或{agentID:“1234”(必需),地址:“1234通道”(可选),…}。在我的调用函数中,我只检查
if(response.data && response.data.agentID) {
do something with my agentID
} else {
is empty response
}
这样,我就不需要使用那些昂贵的方法来检查对象是否为空。如果对象没有agentID字段,则调用函数的对象将为空。
任何类型的值都为空
/* eslint-disable no-nested-ternary */
const isEmpty = value => {
switch (typeof value) {
case 'undefined':
return true;
case 'object':
return value === null
? true
: Array.isArray(value)
? !value.length
: Object.entries(value).length === 0 && value.constructor === Object;
case 'string':
return !value.length;
default:
return false;
}
};
这就是我想到的,用来判断对象中是否有任何非空值。
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;
}
除了Thevs的回答:
var o = {};
alert($.toJSON(o)=='{}'); // true
var o = {a:1};
alert($.toJSON(o)=='{}'); // false
它是jquery+jquery.json