复制数组会产生奇怪的结果('复制'==引用)

时间:2014-11-17 09:20:08

标签: javascript arrays reference

编辑:我遇到的问题是我不知道js数组被视为对象,并且引用的任何数据都不被复制。如果您只想转换js数组,可以使用... reverse();

我以为我可以在javascript中简单地执行以下操作

var originalArray = [1,2,3,5,8,13];
var originalArrayCOPY = originalArray;
console.log ("new copy = "+originalArrayCOPY);

for(var zyx = 0; zyx <6; zyx++){
    var xyz = 5-zyx;
    originalArray[zyx] = originalArrayCOPY[xyz];
}

console.log("original now "+originalArray);
console.log("copy ="+originalArrayCOPY);

但我的结果很奇怪,我觉得我根本不懂javascript !!

新副本= 1,2,3,5,8,13

原版现在是13,8,5,5,8,13,

copy = 13,8,5,5,8,13,

我不明白为什么这不起作用,老实说我不确定为什么原始数组的COPY会发生变化。

如果我至少可以说出问题我可以问谷歌,如果你告诉我问题的名称,我将通过SO问题重命名。

1 个答案:

答案 0 :(得分:2)

使用它:

var originalArray = [1,2,3,5,8,13];
var originalArrayCOPY = originalArray.slice();
console.log ("new copy = "+originalArrayCOPY);
for(var zyx = 0; zyx <6; zyx++){
    var xyz = 5-zyx;
    originalArray[zyx] = originalArrayCOPY[xyz];
}

console.log("original now "+originalArray);
console.log("copy ="+originalArrayCOPY);

'='复制引用和slice()将生成数组的新副本。 见:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/slice