在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
当前回答
使用JSON.stringify怎么样?它几乎可以在所有现代浏览器中使用。
function isEmptyObject(obj){
return JSON.stringify(obj) === '{}';
}
其他回答
你最想知道的是,在使用对象之前,它是否有财产。因此,不要询问isEmpty,然后总是检查if(!isEmption(obj))之类的否定,你可以只测试对象是否为null,是否有财产
export function hasProperties(obj): boolean {
return obj && obj.constructor === Object && Object.keys(obj).length >= 1;
}
export function isObjectEmpty(obj) {
return (
Object.keys(obj).length === 0 &&
Object.getOwnPropertySymbols(obj).length === 0 &&
obj.constructor === Object
);
}
这包括检查包含符号财产的对象。
Object.keys不检索符号财产。
要真正接受ONLY{},在Javascript中使用Lodash的最佳方法是:
_.isEmpty(value) && _.isPlainObject(value)
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 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;
}