在AJAX请求之后,有时我的应用程序可能返回一个空对象,例如:
var a = {};
如何检查情况呢?
在AJAX请求之后,有时我的应用程序可能返回一个空对象,例如:
var a = {};
如何检查情况呢?
jQuery isEmptyObject()
在这种情况下具有特殊功能:
jQuery.isEmptyObject({}) // true
jQuery.isEmptyObject({ foo: "bar" }) // false
我会去检查它是否至少有一把钥匙。这就足以告诉我它不是空的。
typeof obj !== "undefined" && Boolean(Object.keys(obj)[0])
function isEmpty(obj) {
for(var i in obj) { return false; }
return true;
}
根据Object.entries()上的ES2017规范,使用任何现代浏览器均可轻松进行检查-
Object.entries({}).length === 0
我正在用这个。
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;
}
例如:
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;
更新资料
要么
您可以使用isEmptyObject的jQuery实现
function isEmptyObject(obj) {
var name;
for (name in obj) {
return false;
}
return true;
}
旧的问题,但是有问题。如果您唯一的目的是检查对象是否为空,那么包含JQuery并不是一个好主意。相反,只需深入JQuery的代码,您就会得到答案:
function isEmptyObject(obj) {
var name;
for (name in obj) {
if (obj.hasOwnProperty(name)) {
return false;
}
}
return true;
}
对于空对象,使用Object.keys(obj).length(如上文ECMA 5+所建议)的速度要慢10倍!保持旧学校(for ... in)的选择。
经过在Node,Chrome,Firefox和IE 9下的测试,很明显对于大多数用例:
明智地使用底线,请使用:
function isEmpty(obj) {
for (var x in obj) { return false; }
return true;
}
要么
function isEmpty(obj) {
for (var x in obj) { if (obj.hasOwnProperty(x)) return false; }
return true;
}
请参阅“对象为空吗?”中的详细测试结果和测试代码。
您可以检查对象键的数量:
if (Object.keys(a).length > 0) {
// not empty
}
如果您使用的是较新的浏览器,则有一种简单的方法。
Object.keys(obj).length == 0
这是我的首选解决方案:
var obj = {};
return Object.keys(obj).length; //returns 0 if empty or an integer > 0 if non-empty
您可以使用Underscore.js。
_.isEmpty({}); // true
// because Object.keys(new Date()).length === 0;
// we have to do some additional check
Object.keys(obj).length === 0 && obj.constructor === Object
不过请注意,这会创建不必要的数组(的返回值keys
)。
ECMA 5之前的版本:
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop)) {
return false;
}
}
return JSON.stringify(obj) === JSON.stringify({});
}
jQuery.isEmptyObject({}); // true
_.isEmpty({}); // true
_.isEmpty({}); // true
Hoek.deepEqual({}, {}); // true
Ext.Object.isEmpty({}); // true
angular.equals({}, {}); // true
R.isEmpty({}); // true
对于那些同样的问题但使用jQuery的人,可以使用jQuery.isEmptyObject。
if(Object.getOwnPropertyNames(obj).length === 0){
//is empty
}
参见http://bencollier.net/2011/04/javascript-is-an-object-empty/
没有简单的方法可以做到这一点。您必须显式地遍历属性:
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
return false;
}
return true;
}
如果有ECMAScript 5支持,则可以Object.keys()
改用:
function isEmpty(obj) {
return Object.keys(obj).length === 0;
}
If jQuery and the web browser is not available, there is also an isEmpty function in underscore.js.
Additionally, it does not assume the input parameter to be an object. For a list or string or undefined, it will also turn the correct answer.