gpt4 book ai didi

Javascript ES5 unshift/push 改变原始数组而不是内部数组

转载 作者:行者123 更新时间:2023-12-03 02:17:13 27 4
gpt4 key购买 nike

我写了一篇简短的 Codepen,其中我试图在保留原始数组的同时更改临时数组,但我的两个数组都被更改了。

有人可以解释一下问题是什么吗?

var x = ["x"];
abc(x);

function abc(x){
for(var i = 0; i < 3; i++) {
var y = x;
y.unshift("y");
console.log(y);
console.log(x);
}
}

输出:

["y", "x"]
["y", "x"]
["y", "y", "x"]
["y", "y", "x"]
["y", "y", "y", "x"]
["y", "y", "y", "x"]

提前致谢。

最佳答案

没有内部数组。内存中只有一个数组对象。 xy 只是不同的变量,它们保存对单个数组实例的相同引用,因为您已将 x 的值分配给y 这是一个引用,该引用只是被复制。

如果您想使用数组的副本,可以使用 slice 函数。

var x = ["x"];
abc(x);

function abc(x) {

var y = x.slice();

for(var i = 0; i < 3; i++) {
y.unshift("y");
console.log('Array y: ' + y);
console.log('Array x: ' + x);
}

}

关于Javascript ES5 unshift/push 改变原始数组而不是内部数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49320536/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com