包含自定义键的JSON对象作为对象起作用吗?

问题描述 投票:0回答:2

据我了解,javascript允许对象内部的键值的任何类型:

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

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

我在编写下面的代码时遇到了这个问题,关键是:[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]?

javascript json nodes
2个回答
2
投票

您正在混合两个不同的概念。尽管相似,但JSON和JavaScript对象并不相同。您可以阅读有关the difference between JSON and the Object Literal Notation的信息。

为什么将键显示为[object Object]?

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


1
投票

如果尝试运行此命令,它将输出value,如果您打印密钥类型,它将是string

let a = {}
let b = {}

b.name = {name: "name"}

a[b.name] = "value"

console.log(a['[object Object]'])
for (key in a) {
    console.log(typeof key);
    //-> "string"
}

Javascript在保存密钥之前将其设为字符串。

之前已经回答过类似的问题:https://stackoverflow.com/a/3608275/12703377


0
投票

对象的键只能是字符串。当将对象放入[]运算符时,该对象的字符串表示形式将用作键。

let a = {}
let b = {
    toString: function(){return "B string representation"}
}
a['attribute'] = 'value'
a[b] = 'value'
a[2] = 'value'
Object.keys(a)

结果

(3) ["2", "attribute", "B string representation"]

您的问题……看您的代码,您可能想做的是

let a = {}
let b = {}
b.name = "name"
a[b.name] = "value"
console.log(JSON.stringify(a))
© www.soinside.com 2019 - 2024. All rights reserved.