我分配了以下三个变量:
const a = {key:true}
const b = {key:false}
const c = {[a]:'1',[b]:'2'}
然后当我尝试将以下内容记录到控制台时:
console.log(c[a],c[b])
我得到了以下信息:
2 2
当我认为我应该得到:
1 2
为什么我错了,我该如何解决?
最佳答案
对象只能有字符串(或符号)作为它们的键。如果您尝试使用非字符串,它会被转换为字符串。所以当你设置c[a]
为1
时,a
是一个对象,这意味着它需要被转换成一个字符串。所以你最终将 c["[object Object]"]
设置为一个。然后,当您设置 c[b]
时,您会做同样的事情,再次转换为 [object Object]"
,从而覆盖已经存在的值。
尝试注销 c
以查看:
const a = {key:true}
const b = {key:false}
const c = {[a]:'1',[b]:'2'}
console.log(c);
需要使用对象作为键是不常见的,但如果需要,可以使用Maps而不是对象
const a = {key:true}
const b = {key:false}
const c = new Map();
c.set(a, '1');
c.set(b, '2');
console.log(c.get(a));
console.log(c.get(b));
关于javascript - 为什么两个不同的键在一个对象中相互覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54046285/