今天看到書上講到JS的對象,有個範例不是很明白
var myObject = {};
myObject[myObject] = "foo";
myObject["[object Object]"];//foo,这里的[object Object]等价于{}吗?
PHP中文网2017-05-18 10:53:26
這裡的[object Object]是在myObject[myObject] = "foo";
這一步的時候由於myObject的隱式類型轉換得來的,所以這裡的[object Object]只是轉換來的一個字符串而已,只是在對像中以'[object Object]'為鍵存放了'foo'這個值!
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()方法後傳回的字串