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

Javascript 如何确保ajax响应是一个对象?,javascript,ajax,null,undefined,typeof,Javascript,Ajax,Null,Undefined,Typeof,因此,我有一个jQueryAjax调用,我想确保响应是一个对象 我的第一个想法是if(typeof response==“object”)但是有一个问题,如果ajax请求没有返回任何东西(但是它被200头击中),那么response就是null 这里的问题是typeof null==“object” 那么,我如何知道响应实际上是一个{}对象呢 如果(typeof response==“object”&&response!==null) 但这似乎真的是多余的…(下面是在您编辑之前说的“我想我可以做

因此,我有一个jQueryAjax调用,我想确保响应是一个对象

我的第一个想法是
if(typeof response==“object”)
但是有一个问题,如果ajax请求没有返回任何东西(但是它被200头击中),那么
response
就是
null

这里的问题是
typeof null==“object”

那么,我如何知道响应实际上是一个
{}
对象呢

如果(typeof response==“object”&&response!==null)

但这似乎真的是多余的…

(下面是在您编辑之前说的“我想我可以做…”。
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,尽管如果您使用了一个恢复器函数…)也将显示为
“[对象对象]”
(例如,如果您的代码中有
函数Foo
,并通过
新Foo()
创建一个对象,那么上面的代码将返回该对象的
“[对象对象]”
,而不是[悲哀地]
“[object Foo]”


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

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

这是否意味着您仍然可以使用jQuery?使用jQuery如何


我不知道函数存在,为答案喝彩,虽然我在本例中使用jquery,但有时我不是,因此我接受了前面的答案,但会记住这一个。不知道如果您注入
Object.prototype={},会破坏多少
在页面中?@Hailwood:如果在其他脚本之前?可能是所有的。:-)编写chrome扩展,等待扩展变得流行,将注入脚本插入扩展Mwhahahaha!:D可能不是!
if ($.isPlainObject(response)){ /* */ }