Javascript 创建备份阵列

Javascript 创建备份阵列,javascript,arrays,variables,Javascript,Arrays,Variables,我想将testArray存储在tempArray中,然后擦除testArray。在下面的代码中,tempArray与testArray一起被擦除。请解释为什么这不能用一种计算量最小的方法来实现 var testArray = new Array(); testArray.push("green"); alert(testArray.length);//returns one var tempArray = new Array(); var tempArray = testArray; alert

我想将
testArray
存储在
tempArray
中,然后擦除
testArray
。在下面的代码中,
tempArray
testArray
一起被擦除。请解释为什么这不能用一种计算量最小的方法来实现

var testArray = new Array();
testArray.push("green");
alert(testArray.length);//returns one
var tempArray = new Array();
var tempArray = testArray;
alert(tempArray.length);//returns one
testArray.length = 0;
alert(tempArray.length);//returns zero

您的两个变量引用同一个数组,因此使用一个变量更改数组的长度会更改另一个变量。你需要复印一份

而不是

var tempArray = new Array();
var tempArray = testArray;


创建testArray的副本

这是一个传递值而不是一个传递引用问题。当你这样做的时候

var tempArray = testArray;
您正在创建对testArray的引用。基本上,tempArray只是同一对象的另一个名称。正如其他答案所指出的,您需要的是一个类似slice()的方法,它将数据复制到testArray中


如果您发现这一点令人困惑,您可能需要对“按引用传递”与“按值传递”进行一些研究——不同语言之间的差异很大。我在谷歌上快速搜索了“Javascript通过引用传递与通过值传递”并找到了几篇文章。例如,它可能是一个不错的起点。

我有一个数组数组,我想保存其中一个子数组并清空父数组。
var tempArray = testArray.slice();
var tempArray = testArray;