javascript - 包含自定义键作为对象的 JSON 对象是否有效?

标签 javascript json nodes

据我所知,javascript 允许对象内的键值使用任何类型,例如:

{
  key1: "string",
  key2: ["list"],
  key3: 123,
  key4: { name: "string embedded in an object in another object"}
}

但它只允许某些特定类型的键,例如字符串和整数: { “字符串”:“字符串”, 123:“整数” }

当我编写下面的代码时,我遇到了这个问题, key 最终是:[object Object]

let a = {}
let b = {}

b.name = {name: "name"}

a[b.name] = "value"

console.log(JSON.stringify(a))

上面的结果:

{"[object Object]":"value"}

那么js中对象的键允许什么类型? 为什么它显示的键为[object Object]?

最佳答案

您正在混合两个不同的概念。 JSON 和 JavaScript 对象虽然相似,但并不相同。您可以阅读 the difference between JSON and the Object Literal Notation .

And why does it show the key as [object Object]?

因为键只能是字符串或符号。任何其他值都被强制转换为字符串(例如,通过调用该值的 toString 方法(如果可用))。 ({}).toString() 返回“[object Object]”`。

如果你想使用对象作为键,你可以使用Map .

关于javascript - 包含自定义键作为对象的 JSON 对象是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61014402/

相关文章:

javascript - 缩小时 Material 会发光(three.js r78)

c# - 首先使用 C# Json.NET 反序列化具有变量名的 Json 数组

ios - 谷歌地图api在swift3中解析旅行持续时间数据

node.js - react js : Rendering multiple index html in a single page applications

xml - 根据内容选择子节点

javascript - 全日历更改提示而不是弹出窗口

php - 有没有什么方法可以禁用或阻止同源 AJAX?

ruby-on-rails - 在 RoR View 中显示 JSON 变量

关于链接列表中节点的混淆

javascript - 触发点击有时不起作用