在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
当前回答
function isEmpty(obj) {
for(var i in obj) { return false; }
return true;
}
其他回答
我在用这个。
function isObjectEmpty(object) {
var isEmpty = true;
for (keys in object) {
isEmpty = false;
break; // exiting since we found that the object is not empty
}
return isEmpty;
}
Eg:
var myObject = {}; // Object is empty
var isEmpty = isObjectEmpty(myObject); // will return true;
// populating the object
myObject = {"name":"John Smith","Address":"Kochi, Kerala"};
// check if the object is empty
isEmpty = isObjectEmpty(myObject); // will return false;
从这里开始
使现代化
OR
可以使用isEmptyObject的jQuery实现
function isEmptyObject(obj) {
var name;
for (name in obj) {
return false;
}
return true;
}
对于有相同问题但使用jQuery的人,可以使用jQuery.isEmptyObject。
另一种选择是使用is.js(14kB),而不是jquery(32kB)、lodash(50kB)或下划线(16.4kB)。is.js被证明是上述库中最快的库,可以用来确定对象是否为空。
http://jsperf.com/check-empty-object-using-libraries
显然,所有这些库都不完全相同,因此如果您需要轻松地操作DOM,那么jquery可能仍然是一个不错的选择,或者如果您需要的不仅仅是类型检查,那么lodash或下划线可能是不错的选择。对于is.js,语法如下:
var a = {};
is.empty(a); // true
is.empty({"hello": "world"}) // false
与下划线和lodash的_.isObject()一样,这不仅适用于对象,也适用于数组和字符串。
该库使用的是Object.getOwnPropertyNames,它类似于Object.keys,但Object.getownPropertyName更彻底,因为它将返回此处描述的可枚举和非可枚举财产。
is.empty = function(value) {
if(is.object(value)){
var num = Object.getOwnPropertyNames(value).length;
if(num === 0 || (num === 1 && is.array(value)) || (num === 2 && is.arguments(value))){
return true;
}
return false;
} else {
return value === '';
}
};
如果您不想引入库(这是可以理解的),并且知道您只检查对象(而不是数组或字符串),那么下面的函数应该适合您的需要。
function isEmptyObject( obj ) {
return Object.getOwnPropertyNames(obj).length === 0;
}
这只比is.js快一点,只是因为你没有检查它是否是一个对象。
我为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
}
});
从jQuery 1.4开始,isEmptyObject()方法检查对象本身的财产和从原型继承的财产(因为它不使用hasOwnProperty)。参数应该始终是一个普通的JavaScript对象,因为其他类型的对象(DOM元素、原始字符串/数字、宿主对象)可能不会在浏览器中提供一致的结果。要确定对象是否为纯JavaScript对象,请使用$.isPlainObject()。
jQuery.isPlainObject({}) // true
jQuery.isPlainObject( "test" ) // false
Jquery api