Javascript .push() 变量引用/销毁



遇到了这个问题,我找不到解释更改的文档 - 为什么 .push(( 在应用于设置为等于该原始数组的新数组时会更改数组?

前任:

var arr = [1, 2, 3, 4, 5]
var newarr = arr
newarr.push(3)
console.log(newarr) //returns [1, 2, 3, 4, 5, 3] as expected
console.log(arr) //returns [1, 2, 3, 4, 5, 3] as well

这是怎么回事?我没有对 arr 应用任何方法(我可以看到(。看起来 arr 和 newarr 仍然以不适用于其他变量的方式链接,或者 .push(( 以某种方式调用 newarr 赋值行?

相比之下,这与我所期望的类似——

var x=6
var y=x
y=y*6 
console.log(y)  // now 36
console.log(x)  // still six

示例之间的区别在于数组是可变的,而数字不是可变的。

当你写var newarr = arr时,你实际上是在说newarrarr。您需要创建数组的副本才能获得预期的行为。

以数字为例,由于数字是不可变的,因此您永远不会更改数字本身。

为此,您应该使用 splice 方法,此方法将创建数组的副本,而不是更改原始数组。

尽管如此,您应该知道,当您进行归因newarr = arr时,您不会创建一个新的自变量,即数组,而是创建另一个指向同一数组的指针。