gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:12:58 25 4
gpt4 key购买 nike

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

我的第一个想法是 if(typeof response === "object") 但有一个问题,如果 ajax 请求没有返回任何内容(但它被 200 header 命中)然后 responsenull

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

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

我想我可以做 if(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]" for 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 或其原型(prototype)链覆盖。所以我们直接使用 Object.prototype 中的 toString,因为我们知道(除非有人做一些非常愚蠢的事情,比如修改 Object. prototype) 它将按照规范运行。

关于javascript - 如何确保ajax响应是一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13217264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com