搜尋

首頁  >  問答  >  主體

console.log()在變數值實際改變之前顯示變化的值

<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粉427877676P粉427877676443 天前525

全部回覆(2)我來回復

  • P粉023326773

    P粉0233267732023-08-28 15:10:01

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

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

    MDN 警告

    回覆
    0
  • P粉795311321

    P粉7953113212023-08-28 12:26:58

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

    回覆
    0
  • 取消回覆