据我了解,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]?
您正在混合两个不同的概念。尽管相似,但JSON和JavaScript对象并不相同。您可以阅读有关the difference between JSON and the Object Literal Notation的信息。
为什么将键显示为[object Object]?
因为键只能是字符串或符号。其他任何值都被强制转换为字符串(例如,通过调用该值的toString
方法(如果可用))。 ({}).toString()
返回“ [object Object]”`。
如果尝试运行此命令,它将输出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
对象的键只能是字符串。当将对象放入[]
运算符时,该对象的字符串表示形式将用作键。
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))