例题
//例题一
let a = {}
b = '0'
c = 0
a[b] = 'bb'
a[c] = 'cc'
console.log(a[b]) //cc
//解题思路
//a[b] -> a['0'] = 'bb'
//a[c] -> a[0] = 'cc'
//a['0'] <=> a[0]
//例题二
let a = {}
b = Symbol('a')
c = Symbol('a')
a[b] = 'bb'
a[c] = 'cc'
console.log(a[b]) //bb
//解题思路
//Symbol是创建一个唯一性的标识
//Symbol('a') == Symbol('a') false
//例题三
let a = {}
b = {
bb:'bbb'
}
c = {
cc:'ccc'
}
a[b] = 'bbbb'
a[c] = 'cccc'
console.log(a[b]) //cccc
//解题思路
//a[b] -> a['[object Object]'] = 'bbbb'
//a[c] -> a['[object Object]'] = 'cccc'
衍生思考
为什么第三题的属性名是[object Object]?
因为可以认为对象的属性名应该时一个string类型的,所以该对象会使用toString方法。可以定义一个对象重写toString验证
let a = {}
let b = {toString:function (){return 'bb'}}
a[b] = 'bbb'
console.log(a) //{bb: "bbb"}