Sog*_*rno 2 javascript dictionary properties key object
请考虑以下代码段:
var a = {amount: 300}
var b = {amount: 250}
var c = {[a] : 'bla', [b]: 'blabla'};
console.log(c[a]);
Run Code Online (Sandbox Code Playgroud)
它打印:
blabla
Run Code Online (Sandbox Code Playgroud)
但如果不打印:
bla
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
对象不能将其他对象作为其键.发生了什么,因为它a是一个无效的密钥,它的toString方法被调用,从而转换a成一个字符串.同样的事情发生在[b].那么,对于翻译来说,你所做的实际上看起来像这样:
var a = {amount: 300}
var b = {amount: 250}
var c = {['object Object'] : 'bla', ['object Object']: 'blabla'};
console.log(c);Run Code Online (Sandbox Code Playgroud)
如果你想使用对象作为键,你应该使用一个Map代替:
var a = {amount: 300}
var b = {amount: 250}
var c = new Map()
.set(a, 'bla')
.set(b, 'blabla');
console.log(c.get(a));Run Code Online (Sandbox Code Playgroud)
(地图可以包含任何内容)