console.log()在變數值實際改變之前顯示變化的值
P粉427877676
P粉427877676 2023-08-27 22:37:24
0
2
544
<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>
P粉427877676
P粉427877676

全部回覆(2)
P粉023326773

console.log() 會傳遞物件的參考,因此控制台中的值會隨著物件的變更而變更。為了避免這種情況,您可以:

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

MDN 警告

P粉795311321

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):

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