console.log()顯示變數值在實際改變之前的值
P粉356361722
2023-08-22 17:35:57
<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>
console.log()
接收一個物件的引用,所以當物件改變時,控制台中的值也會改變。為了避免這種情況,你可以使用以下方法:MDN警告:
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):