Javascript 如何确保ajax响应是一个对象?
因此,我有一个jQueryAjax调用,我想确保响应是一个对象 我的第一个想法是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) 但这似乎真的是多余的…(下面是在您编辑之前说的“我想我可以做
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)){ /* */ }