javascript数组一起改变

时间:2016-10-17 17:45:05

标签: javascript arrays

创建第二个数组=第一个数组,然后在第二个数组上执行'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>");

2 个答案:

答案 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>");

DEMO

答案 1 :(得分:0)

原因是数组是引用类型。 有两种类型的变量

  1. 值类型 实际值存储在valriable中。 ex - string,number,boolean,null,undefined
  2. 参考类型 value将存储在不同的位置(In Heap),并且对它的引用将存储在变量中。对象,数组和函数是引用类型。

    var secondArray = firstArray;

  3. 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();
    

    在下面的链接中引用其他一些方法

    copy an array