首頁  >  問答  >  主體

javascript - 關於JS中的物件問題

今天看到書上講到JS的對象,有個範例不是很明白

var myObject = {};
myObject[myObject] = "foo";

myObject["[object Object]"];//foo,这里的[object Object]等价于{}吗?
漂亮男人漂亮男人2711 天前419

全部回覆(5)我來回復

  • PHP中文网

    PHP中文网2017-05-18 10:53:26


    這裡的[object Object]是在myObject[myObject] = "foo";這一步的時候由於myObject的隱式類型轉換得來的,所以這裡的[object Object]只是轉換來的一個字符串而已,只是在對像中以'[object Object]'為鍵存放了'foo'這個值!

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-18 10:53:26

    雷雷

    回覆
    0
  • 世界只因有你

    世界只因有你2017-05-18 10:53:26

    雷雷

    回覆
    0
  • ringa_lee

    ringa_lee2017-05-18 10:53:26

    這是物件鍵名的隱式轉換問題。
    就拿這個例子來說,用大白話解釋就是:

    有A對象,想將B對像作為A對象的一個鍵名傳遞進來,但是因為對象的所有鍵名都是字串,所以B對象就會呼叫toString()方法,轉換成一個字串"[ object Object]",來作為一個A物件的一個鍵名存放數據,實例中的資料就是這個"foo"字串。


    另外特別要注意的一點是:
    你的問題中的A對象和B對像是同一個,這點很迷惑人,所以我新聲明了一個mykey來區分。

    var myObject = {};
    var myKey={};
    myObject[myKey]="foo";
    console.log("[object Object]"===myKey.toString());//true
    

    印出結果為true,證明"[object Object]"等於的不是{},而是等於物件經過toString()方法後傳回的字串


    console.log(myObject[myKey.toString()]);//foo
    console.log(myObject["[object Object]"]);//foo
    console.log(myObject[myKey.toString()]===myObject["[object Object]"]);//true
    

    上述程式碼三行程式碼再證明:"[object Object]"等於物件經過toString()方法後傳回的字串

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-18 10:53:26

    key值會自動轉成string的

    回覆
    0
  • 取消回覆