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;