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中文网其他相关文章!