在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
当前回答
正确答案是:
function isEmptyObject(obj) {
return (
Object.getPrototypeOf(obj) === Object.prototype &&
Object.getOwnPropertyNames(obj).length === 0 &&
Object.getOwnPropertySymbols(obj).length === 0
);
}
这将检查:
对象的原型完全是object.prototype。该对象没有自己的财产(无论可枚举性如何)。对象没有自己的属性符号。
换句话说,该对象与使用{}创建的对象无法区分。
其他回答
奇怪的是,我没有遇到一个解决方案来比较对象的值,而不是任何条目的存在(可能我在许多给定的解决方案中都没有找到它)。我想介绍一下如果一个对象的所有值都未定义,则该对象被视为空的情况:
const isObjectEmpty=obj=>Object.values(obj).every(val=>typeof val==“undefined”)console.log(isObjectEmpty({}))//trueconsole.log(isObjectEmpty({foo:undefined,bar:undefine}))//trueconsole.log(isObjectEmpty({foo:false,bar:null}))//false
示例用法
举个例子,我们有一个函数(paintOnCanvas),它从参数(x,y和size)中销毁值。如果所有这些选项都未定义,则它们将被排除在生成的选项集之外。如果不是,它们都包括在内。
function paintOnCanvas ({ brush, x, y, size }) {
const baseOptions = { brush }
const areaOptions = { x, y, size }
const options = isObjectEmpty(areaOptions) ? baseOptions : { ...baseOptions, areaOptions }
// ...
}
只是一个变通办法。如果没有数据,服务器是否可以生成一些特殊属性?例如:var a={empty:true};然后,您可以在AJAX回调代码中轻松检查它。另一种检查方法:如果(a.toSource()==“({})”)//则“a”为空
编辑:如果您使用任何JSON库(例如JSON.js),那么可以尝试JSON.encode()函数,并根据空值字符串测试结果。
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);
资源
要真正接受ONLY{},在Javascript中使用Lodash的最佳方法是:
_.isEmpty(value) && _.isPlainObject(value)
从jQuery 1.4开始,isEmptyObject()方法检查对象本身的财产和从原型继承的财产(因为它不使用hasOwnProperty)。参数应该始终是一个普通的JavaScript对象,因为其他类型的对象(DOM元素、原始字符串/数字、宿主对象)可能不会在浏览器中提供一致的结果。要确定对象是否为纯JavaScript对象,请使用$.isPlainObject()。
jQuery.isPlainObject({}) // true
jQuery.isPlainObject( "test" ) // false
Jquery api