我使用 Sveltekit 和 Nodejs 从数据库获取数据,并且总是这样获取数据
...
responseData = await response.json();
它返回对象,我可以将它分配给一个数组
let getData = [];
getData = responseData ;
让我困惑的是为什么控制台返回的 JSON 对象显示有括号,它应该是一个数组。(但它是用 typeof 检查对象)
[
{a:1,b:1},
{a:2,b:2},
]
我对 JSON 对象的期望应该是这样的
{"name":"John", "age":30, "car":null}
为什么 JSON 对象可以直接赋值给数组?
我想我对这些数据类型有一些误解。
等待
response.json()
的结果当前定义为类型 any
,与其说它是一种类型,不如说是告诉 TypeScript“不用担心这是什么类型”的一种方式。这意味着您不仅可以将任何值分配给 any
类型的变量,还可以将 any
类型的值分配给任何类型的变量,这可能会令人惊讶。 (在这种情况下,通常最好使用类型 unknown
,因为它的价值 - 您需要将 unknown
值显式转换为其他类型,然后才能对其进行更多操作。)
typeof []
是"object"
,所以不能用typeof
来区分数组和对象。使用 Array.isArray(x)
来检查数组。 (请注意,如果您还没有遇到过,typeof null
也是 "object"
。)
JSON 在顶层被认为是有效的数组。在某些情况下,任何与 JSON 兼容的值(包括字符串和数字等)都可以被接受为顶级值,但这通常是避免的。