var a = {}
var b = {key: 'b'}
var c = {key: 'c'}
a[b] = 123
a[c] = 456
console.log(a[b]) // 输出什么
第一次看到这个题目想法:b和c是两个不同的对象,他们的内存地址不同,所以不会被覆盖,故a[b]为123,这个题目出的太简单了
然后很自信的打印了一下,发现答案是456。。。 what?什么鬼
思考问题:不同的对象为什么会被覆盖?
研究测试发现:当一个对象的属性即key值是一个对象的时候,会调用原型上的toString方法将其转化为字符串
故:
a[b] === a['[object Object]'] // true
原来如此,所以a[c]也被转化了,然后key值就是一个字符串[object Object],所以a[b]就变覆盖了,得出答案为456