所以,我有一个jQuery ajax调用,我想确保响应是一个对象。
我的第一个想法是if(typeof response === "object")
但是有一个问题,如果ajax请求什么都没有返回(但是它被200个标头命中),那么response
就是null
。
这里的问题是typeof null === "object"
。
那我怎么知道响应实际上是一个{}
对象?
我想我可以做if(typeof response === "object" && response !== null)
但这看起来多余......
答案 0 :(得分:2)
(以下是在您的编辑之前说“我想我能做......”。null
检查不是多余的,因为它会为条件添加新信息。)
您可以明确排除null
:
if (response !== null && typeof response === "object")
请注意,对于所有对象(包括数组)都适用。
如果你想要的东西只适用于{}
而不是数组或其他内置对象,你可以这样做:
if (Object.prototype.toString.call(response) === "[object Object]")
...因为Object.prototype.toString
在规范中定义为"[object Null]"
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
或其原型链覆盖。我们直接使用来自toString
的{{1}},因为我们知道(除非某人做某事非常愚蠢,如修改Object.prototype
),否则它会按照规范行事
答案 1 :(得分:1)
I have a jQuery ajax call, and I want to make sure that the response is an object
这是否意味着您仍然可以使用jQuery?如何使用$.isPlainObject?
if ($.isPlainObject(response)){ /* */ }