如何确保 ajax 响应是一个对象?



所以,我有一个jQuery ajax调用,我想确保响应是一个对象。

我的第一个想法是if(typeof response === "object")但是有一个问题,如果 ajax 请求不返回任何内容(但它被 200 标头击中),那么responsenull

这里的问题是typeof null === "object".

那么我怎么知道响应实际上是一个{}对象呢?

我想我可以做if(typeof response === "object" && response !== null)

但这似乎真的是多余的...

(下面是在你的编辑之前说"我想我可以做到......"。null检查不是多余的,因为它会向条件添加新信息。

您可以明确排除null

if (response !== null && typeof response === "object")

请注意,这适用于所有对象,包括数组。

如果你想要的东西只适用于{}而不是数组或其他内置对象,你可以这样做:

if (Object.prototype.toString.call(response) === "[object Object]")

。因为规范中Object.prototype.toString定义为null"[object Null]",数组的"[object Array]",日期等"[object Date]"。通过规范未定义的构造函数创建的对象(在您的情况下不太可能,因为您正在处理反序列化的 JSON,尽管如果您使用 reviver 函数"[object Object]"......(例如,如果你的代码中有function Foo并通过new Foo()创建一个对象,上面的代码将返回该对象的"[object Object]",而不是[可悲地]"[object Foo]"

请注意,Object.prototype.toString.call(response)response.toString()不同,因为toString可能已被response或其原型链覆盖。所以我们直接使用Object.prototypetoString,因为我们知道(除非有人做一些非常愚蠢的事情,比如修改Object.prototype),它将按照规范运行。

I have a jQuery ajax call, and I want to make sure that the response is an object

这是否意味着你仍然可以使用 jQuery?使用 $.isPlainObject 怎么样?

if ($.isPlainObject(response)){ /* */ }

相关内容

  • 没有找到相关文章

最新更新