在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
当前回答
下面的示例显示了如何测试JavaScript对象是否为空,如果我们所说的空是指它没有自己的财产。
该脚本适用于ES6。
常量isEmpty=(obj)=>{如果(obj===空||obj==未定义||Array.isArray(obj)||对象类型!=='对象') {返回true;}return Object.getOwnPropertyNames(obj).length==0;};console.clear();console.log('---');console.log(isEmpty(“”));//真的console.log(isEmpty(33));//真的console.log(isEmpty([]));//真的console.log(isEmpty({}));//真的console.log(isEmpty({length:0,custom_property:[]}));//假的console.log('---');console.log(isEmpty('Hello'));//真的console.log(isEmpty([1,2,3]));//真的console.log(isEmpty({test:1}));//假的console.log(isEmpty({长度:3,自定义属性:[1,2,3]}));//假的console.log('---');console.log(isEmpty(new Date()));//真的console.log(isEmpty(无限));//真的console.log(isEmpty(null));//真的console.log(isEmpty(未定义));//真的
其他回答
如果ECMAScript 5支持可用,则可以使用Object.keys():
function isEmpty(obj) {
return Object.keys(obj).length === 0;
}
对于ES3和更高版本,没有简单的方法可以做到这一点。您必须显式循环财产:
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
return false;
}
return 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 {}
我的看法:
函数isEmpty(obj){return Object.keys(obj).length==0;}变量a={a: 1中,b: 2个}变量b={}console.log(isEmpty(a));//假的console.log(isEmpty(b));//真的
只是,我认为目前并不是所有浏览器都实现Object.keys()。
我为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;
}
以上代码足以检查对象的空性。
关于如何检查对象是否为空,写了一篇非常好的文章