鍍金池/ 問答/HTML/ js基礎,想問問大家為什么console.log報的是這三個數(shù)字,原理是啥呢?

js基礎,想問問大家為什么console.log報的是這三個數(shù)字,原理是啥呢?

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
回答
編輯回答
胭脂淚

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 是一個數(shù)組,把一個數(shù)組作為一個對象中的屬性時:屬性名就為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

2017年11月26日 16:24
編輯回答
雨萌萌

你把a打印出來不就知道了嗎

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

obj , arr 當做 key的時候會調用toString的方法。

2017年12月13日 10:38
編輯回答
魚梓

又是一個面試題

2018年6月16日 19:32
編輯回答
別傷我
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
2018年2月27日 07:57