搜尋

首頁  >  問答  >  主體

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); // [2, 1] A.sort(); console.log(C); // [1, 2]</pre> <p>有人能解釋一下第二個例子中發生了什麼嗎? </p>
P粉356361722P粉356361722468 天前409

全部回覆(2)我來回復

  • P粉578680675

    P粉5786806752023-08-23 15:48:53

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

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

    MDN警告

    回覆
    0
  • P粉949848849

    P粉9498488492023-08-23 11:15:47

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

    回覆
    0
  • 取消回覆