可能重複:
Is Chrome's JavaScript console lazy about evaluating arrays?console.log中的錯誤?
我試試下面的代碼:
var myList = new Object();
var item = new Object();
item.text = "item-1";
myList[3] = item;
console.log(myList);
console.log(myList[3].text);
// Assign another object to the same entry
var item2 = new Object();
item2.text = "item-2";
myList[3] = item2;
console.log(myList);
console.log(myList[3].text);
結果是很奇怪:
* Object
* 3: Object
text: "item-2"
item-1
* Object
* 3: Object
text: "item-2"
item-2
但是 - 如果我有一段時間(使用的setTimeout)之後執行的第二部分,並展開第一個對象,我得到它的權利,即:
* Object
* 3: Object
text: "item-1"
item-1
* Object
* 3: Object
text: "item-2"
item-2
我覺得很重要的是要分享它,因爲我覺得一個浪費大量時間試圖瞭解他的代碼中的錯誤。 如果有人提到一個開放的bug或什麼的 - 請回復這張票。 謝謝!
的Chrome版本您使用的?在哪個平臺上?我試圖在我的控制檯中運行你的代碼,並得到正確/合理的答案 –
你是怎麼用'setTimeout'調用它的?我也嘗試過,並獲得預期的結果。 – jsalonen
這不是一個錯誤,它是一個功能! Console.log保留對記錄對象的引用,因此您可以在運行時預覽對象。如果您更改了對象的屬性,則自然此更改也會顯示在此實時預覽中。 你可以嘗試瀏覽對象,看看它的「層次」是無限深的,所以不可能緩存它。 – Kasztan