console.log() 立即回顯數組引用中的更改
在JavaScript 中,保存數字和字符串等原始值的變數按值傳遞,而那些包含物件的則透過引用傳遞。在操作數組時,這種區別變得很明顯。
考慮以下程式碼:
var A = [2, 1]; var C = A; console.log(C); // [1, 2] A.sort(); console.log(C); // [1, 2]
在此範例中,C 被指派了對陣列 A 的引用。當 A 排序時,更改為立即反映在 C 中,甚至在再次訪問 A 之前。
為什麼會發生這種情況?與原始值不同,物件是堆分配的,這意味著它們駐留在電腦的記憶體中並透過引用進行存取。當我們記錄 C 時,console.log() 會列印對陣列的引用,而不是其內容的副本。因此,在再次使用 A 之前,對引用物件的任何後續修改(在本例中為對陣列進行排序)也將在控制台中看到。
要避免這種行為,請在呼叫即時console.log() 時,您可以使用以下技巧:
console.log(JSON.parse(JSON.stringify(C)));
此技術使用JSON 序列化和反序列化創建對象的深層副本。
以上是為什麼 `console.log()` 在 JavaScript 中顯示立即數組變更?的詳細內容。更多資訊請關注PHP中文網其他相關文章!