js对象问题!为什么输出的是4,5,6.

var a={},
 b={key:'b'},
 c={key:'c'};
 
a[b]=123;
a[c]=456;
 
console.log(a[b]);

输出是456。

为什么输出的不是123?

阅读 2.6k
4 个回答

clipboard.png
a 是一个 json 对象,a[b] 赋值的方式相当于 {b:},json的key只能是字符串,所以 a[b] 时会将 b转为字符串,而对象转为字符串是 [object Object] 所以 a[b] 和 a[c] 其实都是同一个属性 ,a 就是 {'[object Object]': XX}设置值时后设置的会覆盖之前设置的值,所以会输出 456

b、c单独做键回调用toString得到[object Object],a[b]、a{c]都等价为a["[object Object]"],就相当于更新了[object Object]这个键的值,所以咯,你可以试试把赋值反过来,看看是不是更新成123

自信跟你说下
问题出在a[b]和a[c]这里 这里面的b c 都是键名,但是键名不能是对象(你前面声明变量b c是对象)
所以b c作为键名就调用了toString方法变成了[object Object]

那么你的代码就变成了

a["[object Object]"]=123;
a["[object Object]"]=456;
//没有a[b]也没有a[c] 他们都变成了a["[object Object]"]

之后无论你打印a[b] 还是 a[c]都是打印a["[object Object]"]
a["[object Object]"] 你最后赋值为456 当然就打印456了

b和c都是对象,但是[]里面是字符串,不能是变量或者对象,否者始终解析成undefined或者最后一次满足条件的值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题