(下面是在您编辑之前说“我想我可以做......”。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
其原型链覆盖。所以我们直接使用toString
from Object.prototype
,因为我们知道(除非有人做一些非常愚蠢的事情,比如修改Object.prototype
),它会按照规范运行。