扫码关注官方订阅号
var a={};b={key:'b'};c={key:"c"};a[b]=b;a[c]=456; console.log(a[b])
打印结果是456
业精于勤,荒于嬉;行成于思,毁于随。
在执行a[b] = b的时候,会用b作key,而b是个对象,实际执行的是a[b.toString()] = b,即a['[object Object]'] = {key:'b'}同理执行a[c] = 456时,实际执行的是a[c.toString()] = 456,即a['[object Object]'] = 456由于b.toString()和c.toString()都等于'[object Object]',你等于在同一个key上赋值了
a[b] = b
a[b.toString()] = b
a['[object Object]'] = {key:'b'}
a[c] = 456
a[c.toString()] = 456
a['[object Object]'] = 456
b.toString()
c.toString()
'[object Object]'
因为你把属性名设成了对象,对象调用toString()方法成为[object Object],属性名一样,所以会有那样的结果。应该设成字符串 var a={};b={key:'b'};c={key:"c"};a['b']=b;a['c']=456; 或 var a={};b={key:'b'};c={key:"c"};a.b=b;a.c=456; 就不会有这样的问题
很正常啊,a[b]=b,实际上是a[b.toString()]=b,在这个例子中b.toString()==c.toString()==‘[Object Object]’
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
在执行
a[b] = b的时候,会用b作key,而b是个对象,实际执行的是a[b.toString()] = b,即a['[object Object]'] = {key:'b'}同理执行
a[c] = 456时,实际执行的是a[c.toString()] = 456,即a['[object Object]'] = 456由于
b.toString()和c.toString()都等于'[object Object]',你等于在同一个key上赋值了很正常啊,a[b]=b,实际上是a[b.toString()]=b,
在这个例子中b.toString()==c.toString()==‘[Object Object]’