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

时间:2012-11-04 08:54:00

标签: javascript ajax null undefined typeof

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

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

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

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

我想我可以做if(typeof response === "object" && response !== null)

但这看起来多余......

2 个答案:

答案 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)){ /* */ }