据我所知,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 .
- JSON语法有限,属性只能是字符串。
- 一个JavaScript Object的“键值是字符串或符号值”。您可以在this question中找到更多信息.
And why does it show the key as [object Object]?
因为键只能是字符串或符号。任何其他值都被强制转换为字符串(例如,通过调用该值的 toString
方法(如果可用))。 ({}).toString()
返回“[object Object]”`。
如果你想使用对象作为键,你可以使用Map .
关于javascript - 包含自定义键作为对象的 JSON 对象是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61014402/