我们有变量“a”,我们想要创建变量“b”作为“a”变量的镜像,然后更改其中一个元素。
代码
function h(){
var a=[[1,2,3]]
var b=a;
b[0][0]="test"
Logger.log(b)
Logger.log(a)
}
输出
[[test,2,3]]
[[test,2,3]]
为什么会这样?有什么方法可以避免这种情况吗?
答案 0 :(得分:1)
这引出了另一个问题:
Copying array by value in JavaScript
您可以测试一些建议的解决方案。我测试了这个答案:
https://stackoverflow.com/a/23245968/5372400
代码:
function h(){
var a=[[1,2,3]];
var b = JSON.parse(JSON.stringify(a));
b[0][0]="test";
Logger.log(b);
Logger.log(a);
}
结果是
[[test, 2, 3]]
[[1.0, 2.0, 3.0]
看起来,像javascript
这样的c
不进行数组分配。
答案 1 :(得分:0)
你必须在数组b中深度复制值才能使用切片方法:
arr2 = arr1.slice();
以下是您的代码,但有一些修改:
function h(){
var a=[1,2,3];
var b= a.slice();
b[0]="test";
console.log(b);
console.log(a);
}