0

I would like to store testArray in tempArray, and then erase testArray. In the code below tempArray gets erased along with testArray. Please explain why this isn't working along with a computationally minimal way of achieving this.

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
4

3 回答 3

3
var tempArray = testArray.slice();

创建 testArray 的副本

于 2013-11-03T03:03:34.550 回答
3

这是一个按值传递与按引用传递的问题。当你这样做

var tempArray = testArray;

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

如果您发现这令人困惑,您可能需要对通过引用进行一些研究,而不是按值传递 - 它因语言而异。我在 'Javascript pass by reference vs pass by value' 上快速搜索了一下,发现了一些文章。例如,这看起来可能是一个不错的起点。

于 2013-11-03T03:06:27.160 回答
1

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

代替

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

var tempArray = testArray.slice(0);
于 2013-11-03T03:03:22.520 回答