iT邦幫忙

0

請問關於object的值

const obj = {};
const objA = {name:'Alice'};
const objB = {name:'Tom'};

obj[objA] = 123;
obj[objB] = 456;

console.log('1:', obj[objA] ); // 456

想請問為何console.log的結果是456,而不是123

因為 obj[objA] = obj[String(objA)] = obj['[object Object]'] = obj[objB]

1 個回答

1
毛毛
iT邦新手 3 級 ‧ 2021-09-22 17:06:14
最佳解答

因為你前面已經宣告 objA 與 objB 都是物件型別
物件裡面的屬性名只能使用字串型別
Javascript 會自動幫你把 objA 與 objB 轉型成字串型別

console.log('objA', objA.toString() ) // "objA" "[object Object]"

所以你檢查 obj 會看到

console.log('obj', obj );  
/* 
    {
        "[object Object]": 456
    }
*/

因為自動轉型後,屬性名一樣時,後面會覆蓋前面的
obj["[object Object]"] = 123;
obj["[object Object]"] = 456;

解決方法改成使用字串或數字當作屬性名

const obj = {};
const objA = {name:'Alice'};
const objB = {name:'Tom'};

obj['objA'] = objA;
obj['objB'] = objB;

我要發表回答

立即登入回答