所以,我有一个jQuery ajax调用,我想确保响应是一个对象。
我的第一个想法是if(typeof response === "object")
但是有一个问题,如果 ajax 请求不返回任何内容(但它被 200 标头击中),那么response
null
。
这里的问题是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.prototype
的toString
,因为我们知道(除非有人做一些非常愚蠢的事情,比如修改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)){ /* */ }