2013-08-30 27 views
0

我在Chrome的控制檯中發現了這種奇怪的行爲,並想知道它是否有意爲之,如果有的話,它的目的是什麼。Chrome控制檯輸出遭受海森伯格原理

一個例子來說明:

behavior hinges on whether you view this object

讓我們與你所期望的行爲開始。從上面的圖片開始,點擊「對象」行旁邊的箭頭展開它。然後您可以打開它或重新關閉它。重要的是你展開一次。現在繼續:

observed, so not changed

正如你所看到的,我們改變對象的關鍵點之一的值,但對象打印出來上述它不受我們的變化,符合市場預期。

現在清除您的控制檯並開始實驗。輸入相同的行來創建對象「o」並用循環填充它的屬性。然而,這一次,而不是展開關鍵線上的對象。相反,直接繼續使用更改屬性「x7」的值的下一個命令。只有這樣做後,你才能回到關鍵線上展開物體。一個很好的surpise會等着你:

future changed past

未來已經改變了過去!

+0

我無法複製這些結果... –

+0

認爲與控制檯進行交互會更新顯示的對象以符合它們的值是不合理的嗎? – Bryce

+0

@BryceHanscomb,但它並不一致,如第一個例子所示。所以不是讓所有內容保持同步的情況。我相信尤里的答案是有道理的。 – Jonah

回答

4

這裏沒有神祕感。在擴展時檢索屬性。您在之後擴展了以上對象的引用,您在下面更改了其屬性。

+0

雖然這是爲什麼?性能?因爲如果你使用控制檯語句進行調試,這種行爲可能會阻礙你的努力。有什麼辦法可以關閉它嗎?或者我需要使用JSON.parse來輸出對象字符串嗎? – Jonah

+0

@Jonah這是關於沒有必要的行動。這是一個懶惰的對象的概念。只根據需要計算。 – DivinusVox

+0

@DivinusVox,對,這確實有道理,雖然如我所說,它真的絆了我今晚的調試工作 – Jonah