首页 > 解决方案 > 在 Javascript 中使用对象作为键时的奇怪行为

问题描述

考虑以下代码段:

var a = {amount: 300}
var b = {amount: 250}
var c = {[a] : 'bla', [b]: 'blabla'};
console.log(c[a]);

它打印:

blabla

但它不应该打印:

bla

这里发生了什么?

标签: javascriptdictionaryobjectpropertieskey

解决方案


对象不能有其他对象作为它们的键。发生的事情是,由于a是一个无效的键,它的toString方法被调用,从而转换a成一个字符串。同样的事情发生在[b]. 所以,对于解释器来说,你所做的实际上是这样的:

var a = {amount: 300}
var b = {amount: 250}
var c = {['object Object'] : 'bla', ['object Object']: 'blabla'};
console.log(c);

如果你想使用对象作为键,你应该使用 aMap代替:

var a = {amount: 300}
var b = {amount: 250}
var c = new Map()
  .set(a, 'bla')
  .set(b, 'blabla');
console.log(c.get(a));

(地图可以有任何东西作为它们的键)


推荐阅读