var a={}, b={key:‘b‘}, c={key:‘c‘}; a[b]=123; a[c]=456; console.log(a[b]);结果为什么是456?

今天在一个技术交流群里面看到这样一个问题:
var a={},
b={key:‘b’},
c={key:‘c’};
a[b]=123;
a[c]=456;
console.log(a[b]);//为什么是456?
在这里插入图片描述
我也不懂什么原理,打印确实是456,那么一起来搞搞,看他为什么是456吧。

  • 开始猜测是属性值的覆盖,因为我也打印a[c]了,结果也是456,在查阅文档之后发现我是瞎猫碰上死耗子,a[b]的值为456是因为b跟c都是对象,而普通对象的属性名如果是对象的话要先转为字符串,那这样下来的话,就是用b或者c作为属性名的话,每次都是 object object了,只是给他两次赋值而已,话不多说,上分析代码:
    var a = {};
    var b = { key: "a" };
    var c = { key: "c" };
    
    //b要作为属性名先转为字符串,相当于:a[object Object]:="123"
    a[b] = "123";
    
    //打印一下a,此时a只有一个属性名为object Object,属性值为123的键值对
    console.log(a) //{[object Object]: "123"} 
    
    //同上,c要作为属性名先转为字符串,相当于:a[object Object]:="456"
    a[c] = "456";
    
    //再打印一下a,此时a还是只有一个属性名为object Object,属性值为456的键值对
    console.log(a)    //{[object Object]: "456"}

	//上面的a[c] = "456"只是给a[object Object]重新赋值而已。
	//打印a[b]其实就是在打印a[object Object],由于他的最一次的赋值为456。
	//故:
    console.log(a[b]);//456

可能有点繁琐,看张图好理解一些
在这里插入图片描述

以上就是我的分析了,看完文档再理解是不是很简单

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值