搜尋

首頁  >  問答  >  主體

javascript 輸出的值

var a={},
b={key:'b'},
c={key:'c'};

a[b]=123;
a[c]=456;

console.log(a[b]);//輸出是456。
為什麼輸出的結果是456 不明白..求各位大神幫忙講解一些..

迷茫迷茫2724 天前724

全部回覆(3)我來回復

  • 黄舟

    黄舟2017-06-12 09:32:19

    Javascript 中,當通過 [] 訪問對象屬性時, 方括號中的表達式將會被求值並被轉換成一個字符串,調用它的toString方法.
    所以:

    var a = {};
    b={key:'b'};
    console.log(b.toString()); // [object Object]
    a[b]=123;
    console.log(typeof Object.keys(a)[0]);    // string, 属性名 b 转换成了字符串.
    

    所以 bc 都轉換成相同的字串 [object Object]. 所以再次賦值就會被覆蓋.

    回覆
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-12 09:32:19

    a[b]=123;這一步之後你印一下console.log(a);你就會恍然大悟

    回覆
    0
  • phpcn_u1582

    phpcn_u15822017-06-12 09:32:19

    你把物件 b 當做 a 的屬性,就會先呼叫物件btoString()方法。

    var b={key:'b'};
    b.toString(); // '[object Object]'

    所以,

    a[b] = 123;
    // 即为
    a['[object Object]'] = 123;
    // 同理,下面一步赋值操作 c 也会先转换,然后再次更新属性 '[object Object]'对应的值
    a['[object Object]'] = 456;

    回覆
    0
  • 取消回覆