在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
当前回答
我的看法:
函数isEmpty(obj){return Object.keys(obj).length==0;}变量a={a: 1中,b: 2个}变量b={}console.log(isEmpty(a));//假的console.log(isEmpty(b));//真的
只是,我认为目前并不是所有浏览器都实现Object.keys()。
其他回答
jQuery在这种情况下具有特殊的函数isEmptyObject():
jQuery.isEmptyObject({}) // true
jQuery.isEmptyObject({ foo: "bar" }) // false
阅读更多信息http://api.jquery.com/jQuery.isEmptyObject/
1.使用Object.keys
Object.keys将返回一个数组,其中包含对象的属性名。如果数组的长度为0,那么我们知道对象是空的。
function isEmpty(obj) {
return Object.keys(obj).length === 0 && obj.constructor === Object;
}
我们还可以使用Object.values和Object.entries检查这一点。这通常是确定对象是否为空的最简单方法。
2.使用for…in循环对象财产
for…in语句将循环通过对象的可枚举属性。
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
return false;
}
return true;
}
在上面的代码中,我们将循环遍历对象财产,如果一个对象至少有一个属性,那么它将进入循环并返回false。如果对象没有任何财产,那么它将返回true。
#3.使用JSON.stringify如果我们将对象字符串化,结果只是一个左括号和右括号,那么我们就知道对象是空的。
function isEmptyObject(obj){
return JSON.stringify(obj) === '{}';
}
4.使用jQuery
jQuery.isEmptyObject(obj);
5.使用Undercore和Lodash
_.isEmpty(obj);
资源
如果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;
}
IsEmpty Object意外地失去了它的含义,即:它是编程语义,当我们著名的Yahoo专家将定制的非枚举对象财产引入ECMA并被接受时。
[如果您不喜欢历史-请直接跳到工作代码]
对于这个问题,我看到了很多好的答案。然而,获取ECMA脚本的最新扩展并不是一条诚实的道路。我们过去为了保持网景4.x和基于网景的网页的工作和项目的活力而阻止了网络的发展,而这些网页(顺便说一句)是极其原始的向后和独特的,拒绝使用新的W3C标准和主张(在当时这是非常革命性的,对程序员来说是友好的),而现在却对我们自己的遗产残酷无情。
杀死Internet Explorer 11是完全错误的!是的,一些自“冷战”时代以来一直蛰伏在微软内部的老战士同意了这一点——理由是错误的但这并不正确!
在你的答案中使用一个新引入的方法\属性,并将其作为一个发现(“它一直存在,但我们没有注意到它”),而不是一个新发明(就其真实情况而言),有点“绿色”和有害。大约20年前,我曾经犯过这样的错误,当时我仍然无法分辨其中已经存在的东西,并将我能找到的一切作为参考,作为一个共同的工作解决方案。。。
向后兼容性很重要!
我们只是还不知道。这就是为什么我需要分享我的“百年”通用解决方案的原因,该解决方案仍然向后和向前兼容,以适应不可预见的未来。
对in运算符的攻击很多,但我认为这样做的人终于有了理智,真正开始理解和欣赏真正的动态类型语言,如JavaScript及其美丽的本质。
我的方法旨在简单和核心,出于上述原因,我不称其为“空”,因为该词的含义不再准确。是可枚举的,似乎是具有确切含义的词。
function isEnum( x ) { for( var p in x )return!0; return!1 };
一些用例:
isEnum({1:0})
true
isEnum({})
false
isEnum(null)
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;
}