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

今天在技术交流群看到了一个很有意思的一道题

var a={}, b={key:‘a’}, c={key:‘c’}; a[b]=123; a[c]=456;
console.log(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

在这里插入图片描述

你可能感兴趣的:(前端学习)