(下面是在您编辑之前说“我想我可以做......”。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),它会按照规范运行。