js基础,想问问大家为什么console.log报的是这三个数字,原理是啥呢?

新手上路,请多包涵
var a = {};
var b = {key: 'b'};
var c = {key: 'c'};
var d = [3,5,6];
a[b] = 123;
a[c] = 345;
a[d] = 333;
console.log(a[b]);  // 345
console.log(a[c]);  // 345
console.log(a[d]);  // 333
阅读 2.6k
4 个回答
a[b]=a['[object Object]']=123
a[c]=a['[object Object]']=345
a[d]=a['3,5,6']=333
// 所以
a[b]=a['[object Object]']=345
a[c]=a['[object Object]']=345
a[d]=a['3,5,6']=333

var a = {};
var b = {key: 'b'};
var c = {key: 'c'};
var d = [3,5,6];
a[b] = 123;
上面一行代码:b 是一个对象,把一个对象作为一个对象中的属性时:属性名就为[object Object],把123给这个属性赋值
a[c] = 345;
上面这样代码:同上面的解释,此时[object Object]属性存在,所以赋值345会把123覆盖。
a[d] = 333;
上面这样代码:d 是一个数组,把一个数组作为一个对象中的属性时:属性名就为arrayName.join(','),例如:[1,{a:2},3,4].join(',')//"1,[object Object],3,4",把333给这个属性赋值

所以有下面的输出
console.log(a[b]); // 345
console.log(a[c]); // 345
console.log(a[d]); // 333

你把a打印出来不就知道了吗

{
    "[object Object]":345,
    "3,5,6":333
}

obj , arr 当做 key的时候会调用toString的方法。

推荐问题
宣传栏