javascript - 为什么两个不同的键在一个对象中相互覆盖?

标签 javascript

我分配了以下三个变量:

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/

相关文章:

javascript - 在javascript中释放数组数组的最佳方法

javascript - 如何修改代码让Highcharts图表不覆盖页面顶部的固定导航栏?

javascript - Angular:或者 h2 标签内的运算符?

javascript - 如何在 vuetify 上安装翻译?

javascript - 使用 Node JS 进行字符串操作

javascript - 在 css 中打开模态窗口时运行 javascript 函数

javascript - React 收到非 bool 属性的 `true`

javascript - 我如何让 jQuery 查看多个 ID 的值

JavaScript 将数字作为字符串连接

javascript - 在 TypeScript 中使用 Promises 的异步函数的正确错误模式