可能重複:
Is Chrome's JavaScript console lazy about evaluating arrays?爲什麼javascript對象在Chrome,Firefox,Safari的控制檯中顯示不同的值?
考慮此javascript:
var foo = {bar : 1111};
console.log(foo);
console.log(foo.bar);
foo.bar = 2222;
console.log(foo);
console.log(foo.bar);
在Firefox中的螢火蟲,這顯示了我本來期望:
Object { bar=1111}
1111
Object { bar=2222}
2222
然而,在Safari和鉻的控制檯它表明:
Object { bar=2222}
1111
Object { bar=2222}
2222
換句話說,對象被示出,如果打印的打印傾倒,但正確的值的特定屬性,當在控制檯中錯誤的屬性。
這是一個瀏覽器的怪癖嗎?或者我缺少面向對象的JavaScript的基本方面?
如果我猜,我說的調試器存儲用於第一個存儲器中的對象的引用,而對於第二個中的值本身。由於您的代碼更新了引用,因此正在監視的調試器中的值也會更新。儘管總猜測。 –
最好的猜測是Safari和Chrome正在優化JavaScript,並將賦值與foo.bar與原始對象定義相結合,然後在兩個console.log語句中嵌入foo.bar的期望值。 –
感謝邁克和約翰。它確實表明,情況並非如此。 我不得不說,在我眼裏這意味着Safari和Chrome在我試圖調試時告訴我有關我的代碼的謊言!如果我想在執行過程中快速查看代碼中兩個點包含的內容,那麼Safari和Chrome並沒有給我一個真實的表示。 也許我的調試程序不夠複雜,我不應該依賴代碼中的手動console.log行? –