在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
在AJAX请求之后,有时我的应用程序可能会返回一个空对象,例如:
var a = {};
我该如何检查是否是这种情况?
当前回答
要真正接受ONLY{},在Javascript中使用Lodash的最佳方法是:
_.isEmpty(value) && _.isPlainObject(value)
其他回答
我为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
}
});
要真正接受ONLY{},在Javascript中使用Lodash的最佳方法是:
_.isEmpty(value) && _.isPlainObject(value)
我的看法:
函数isEmpty(obj){return Object.keys(obj).length==0;}变量a={a: 1中,b: 2个}变量b={}console.log(isEmpty(a));//假的console.log(isEmpty(b));//真的
只是,我认为目前并不是所有浏览器都实现Object.keys()。
奇怪的是,我没有遇到一个解决方案来比较对象的值,而不是任何条目的存在(可能我在许多给定的解决方案中都没有找到它)。我想介绍一下如果一个对象的所有值都未定义,则该对象被视为空的情况:
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 }
// ...
}
这里有一个快速、简单的函数:
function isEmptyFunction () {
for (const i in this) return false
return true
}
作为getter实现:
Object.defineProperty(Object.prototype, 'isEmpty', { get: isEmptyFunction })
console.log({}.isEmpty) // true
作为单独的功能实现:
const isEmpty = Function.prototype.call.bind(isEmptyFunction)
console.log(isEmpty({})) // true