1

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

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

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

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

我想我能做到if(typeof response === "object" && response !== null)

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

4

2 回答 2

2

(下面是在您编辑之前说“我想我可以做......”。null检查不是多余的,因为它为条件添加了新信息。)

您可以明确排除null

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

请注意,这对所有对象都是如此,包括数组。

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

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

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

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

于 2012-11-04T08:55:05.137 回答
1

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

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

if ($.isPlainObject(response)){ /* */ }
于 2012-11-04T10:38:10.347 回答