84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
今天看到書上講到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的