console.log()顯示變數值在實際改變之前的值
P粉356361722
P粉356361722 2023-08-22 17:35:57
0
2
403
<p>這段程式碼我懂。我們將A複製一份並稱之為C。當A發生變化時,C不變。 </p> <pre class="brush:php;toolbar:false;">var A = 1; var C = A; console.log(C); // 1 A ; console.log(C); // 1</pre> <p>但當A是陣列時,情況就不同了。不僅C會改變,而且在我們甚至觸碰A之前就已經改變了。 </p> <pre class="brush:php;toolbar:false;">var A = [2, 1]; var C = A; console.log(C); // [2, 1] A.sort(); console.log(C); // [1, 2]</pre> <p>有人能解釋一下第二個例子中發生了什麼嗎? </p>
P粉356361722
P粉356361722

全部回覆(2)
P粉578680675

console.log()接收一個物件的引用,所以當物件改變時,控制台中的值也會改變。為了避免這種情況,你可以使用以下方法:

console.log(JSON.parse(JSON.stringify(c)))

MDN警告

P粉949848849

Pointy的答案提供了很好的訊息,但對於這個問題來說並不是正確的答案。

OP所描述的行為是一個bug的一部分,該bug最早於2010年3月報告,2012年8月對Webkit進行了修復,但截至本文撰寫時,尚未整合到Google Chrome中。該行為取決於將物件文字傳遞給console.log()時,控制台偵錯視窗是開啟還是關閉

原始bug報告的摘錄(https://bugs.webkit.org/show_bug.cgi?id=35801):

來自Chromium開發人員的回應:

隨後發生了很多抱怨,最終導致了一個bug修復。

2012年8月實施的補丁的變更日誌說明(http://trac.webkit.org/changeset/125174):

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板