在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
当前回答
纯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
其他回答
这一行代码也有助于回退到较旧的浏览器。
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之间的详细区别
这里有一个快速、简单的函数:
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
我为AJAX调用返回了一个空的JSON响应,在IE8中jQuery.isEmptyObject()没有正确验证。我加了一张额外的支票,似乎能正确地抓住它。
.done(function(data)
{
// Parse json response object
var response = jQuery.parseJSON(data);
// In IE 8 isEmptyObject doesn't catch the empty response, so adding additional undefined check
if(jQuery.isEmptyObject(response) || response.length === 0)
{
//empty
}
else
{
//not empty
}
});
isEmptyObject(value) {
return value && value.constructor === Object && Object.keys(value).length === 0;
}
以上代码足以检查对象的空性。
关于如何检查对象是否为空,写了一篇非常好的文章
检查值的新方法是if(Object.entries(this.props.myarticle).length==0){}
这里肌肉是物体