console.log() 與陣列的意外行為
在JavaScript 中,console.log() 函數在檢查陣列時表現異常。此行為源自於以下事實:console.log() 向陣列傳遞了引用,而不是值的副本。
範例:
var A = [2, 1]; var C = A; console.log(C); // [1, 2] A.sort(); console.log(C); // [1, 2]
當我們對陣列 A 進行排序時,我們期望 C 的值保持不變。然而,事實並非如此。 C 的值也變成了排序數組 [1, 2]。
為什麼會發生這種情況?
因為 console.log() 傳遞了一個引用對於數組,對原始數組所做的任何更改也會反映在 C 持有的引用中。因此,當A 排序時,C 的輸出也會
如何避免這種行為:
為了避免這種意外行為,我們可以使用以下解決方法:
console.log(JSON.parse(JSON.stringify(C)))
此轉換使用JSON.stringify() 將陣列C 轉換為字串,然後使用JSON.parse()返回數組。這有效地創建了數組的深層副本,確保對原始數組所做的任何更改都不會反映在副本中。
瀏覽器警告:
重要的是請注意,Mozilla 開發者網路(MDN) 對最新版本的Chrome 和Firefox 中的此行為發出警告:
「請注意,如果您登入最新版本的Chrome 和Firefox中,物件在控制台上記錄的是物件的引用,這不一定是您呼叫 console.log() 時物件的“值”,但它是開啟控制台時物件的值。
以上是為什麼 `console.log()` 在 JavaScript 中顯示意外的陣列行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!