控制台輸出修改前更改的數組值
在JavaScript 中,變數通常透過引用傳遞,這表示對之後的變數進行更改已指派給另一個變數將反映在這兩個變數中。當使用 console.log() 顯示變數的值時,經常會觀察到這種行為。
例如,考慮以下程式碼:
let A = [2, 1]; let C = A; console.log(C); // [1, 2]
在此範例中,變數 C被分配了對儲存在變數 A 中的陣列的引用。當執行 console.log(C) 時,它輸出數組的目前值,即 [1, 2]。但是,如果稍後修改原始數組 A,則該值可能不是最新的。
A.sort(); console.log(C); // [1, 2]
在陣列 A 上執行 sort() 方法時,其元素會就地排序。由於陣列 C 保存對相同物件的引用,因此 console.log(C) 的輸出仍為 [1, 2]。這是因為 console.log() 在執行時顯示物件的目前值,而不是靜態值。
為了避免這種意外行為並確保 console.log() 輸出準確的值,您可以使用:
console.log(JSON.parse(JSON.stringify(C)));
或者,如 MDN 建議:
Object.assign({}, A)
以上是為什麼 JavaScript 中 `console.log()` 似乎顯示修改前已更改的陣列值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!