创建第二个数组=第一个数组,然后在第二个数组上执行'shift',第一个数组也受到影响。见下面的代码。我期待第二阵容在转换后包含Larry和Moe,并且firstArray包含原始的三个元素。转变后,两个阵列只有Larry和Moe作为元素?
var firstArray = ["Curly", "Larry", "Moe"]
var secondArray = firstArray;
var thirdArray = firstArray;
alert("This is first array " + firstArray + "<br>");
secondArray.shift();
alert("This is first array " + firstArray + "<br>");
alert("This is second array " + secondArray + "<br>");
alert("This is third array " + thirdArray + "<br>");
答案 0 :(得分:0)
此处secondArray
&amp; thirdArray
引用与firstArray
相同的数组,而不是新的独立数组。
您可以使用slice,它将返回数组部分的浅表副本
var firstArray = ["Curly", "Larry", "Moe"]
var secondArray = firstArray.slice();
var thirdArray = firstArray.slice();
alert("This is first array " + firstArray + "<br>");
secondArray.shift();
alert("This is first array " + firstArray + "<br>");
alert("This is second array " + secondArray + "<br>");
alert("This is third array " + thirdArray + "<br>");
答案 1 :(得分:0)
原因是数组是引用类型。 有两种类型的变量
参考类型 value将存储在不同的位置(In Heap),并且对它的引用将存储在变量中。对象,数组和函数是引用类型。
var secondArray = firstArray;
firstArray存储对先前声明的数组的引用 当您运行上面的代码时,它会将firstArray的引用复制到secondArray变量。在第二行之后运行,阵列也有firstArray的引用。当你运行
secondArray.shift();
它将从引用数组中删除第一个值,该数值由所有三个变量引用。
请阅读以下链接了解更多详情
Primitive value vs Reference value
http://docstore.mik.ua/orelly/webprog/jscript/ch04_04.htm
您可以使用切片方法获取数组的副本,如下所示
var secondArray = firstArray.slice();
在下面的链接中引用其他一些方法