console.log()在變數值實際改變之前顯示變化的值
P粉427877676
2023-08-27 22:37:24
<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); // [1, 2]
A.sort();
console.log(C); // [1, 2]</pre>
<p>有人可以解釋一下第二個例子中發生了什麼嗎? </p>
console.log()
會傳遞物件的參考,因此控制台中的值會隨著物件的變更而變更。為了避免這種情況,您可以:MDN 警告:
Pointy 的答案提供了很好的訊息,但這不是這個問題的正確答案。
OP 描述的行為是 2010 年 3 月首次報告的錯誤的一部分,並於 2012 年 8 月針對 Webkit 進行了修補,但截至撰寫本文時尚未整合到 Google Chrome 中。行為取決於將物件文字傳遞給
console.log()
時控制台偵錯視窗是開啟還是關閉 .原始錯誤回報摘錄 (https://bugs.webkit.org/show_bug .cgi?id=35801):
Chromium 開發人員的回應:
隨之而來的是許多抱怨,最終導致了錯誤修復。
2012 年 8 月實施的補丁的變更日誌說明 (http://trac.webkit.org/changeset/ 125174):