javascript - 在 Javascript 中使用对象作为键时的奇怪行为
问题描述
考虑以下代码段:
var a = {amount: 300}
var b = {amount: 250}
var c = {[a] : 'bla', [b]: 'blabla'};
console.log(c[a]);
它打印:
blabla
但它不应该打印:
bla
这里发生了什么?
解决方案
对象不能有其他对象作为它们的键。发生的事情是,由于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));
(地图可以有任何东西作为它们的键)