今天看到書上講到JS的對象,有個範例不是很明白
var myObject = {}; myObject[myObject] = "foo"; myObject["[object Object]"];//foo,这里的[object Object]等价于{}吗?
這裡的[object Object]是在myObject[myObject] = "foo";這一步的時候由於myObject的隱式類型轉換得來的,所以這裡的[object Object]只是轉換來的一個字符串而已,只是在對像中以'[object Object]'為鍵存放了'foo'這個值!
myObject[myObject] = "foo";
雷雷
這是物件鍵名的隱式轉換問題。 就拿這個例子來說,用大白話解釋就是:
有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()方法後傳回的字串
key值會自動轉成string的
這裡的[object Object]是在
myObject[myObject] = "foo";
這一步的時候由於myObject的隱式類型轉換得來的,所以這裡的[object Object]只是轉換來的一個字符串而已,只是在對像中以'[object Object]'為鍵存放了'foo'這個值!雷雷
雷雷
這是物件鍵名的隱式轉換問題。
就拿這個例子來說,用大白話解釋就是:
有A對象,想將B對像作為A對象的一個鍵名傳遞進來,但是因為對象的所有鍵名都是字串,所以B對象就會呼叫toString()方法,轉換成一個字串"[ object Object]",來作為一個A物件的一個鍵名存放數據,實例中的資料就是這個"foo"字串。
另外特別要注意的一點是:
你的問題中的A對象和B對像是同一個,這點很迷惑人,所以我新聲明了一個mykey來區分。
key值會自動轉成string的