javascript数组一起变化

javascript数组一起变化,javascript,arrays,Javascript,Arrays,创建第二个数组=到第一个数组,然后对第二个数组执行“移位”,第一个数组也受到影响。请参阅下面的代码。我希望第二个数组在轮班后包含Larry和Moe,第一个数组包含原来的三个元素。换班后,两个阵列都只有Larry和Moe作为元素 var firstArray = ["Curly", "Larry", "Moe"] var secondArray = firstArray; var thirdArray = firstArray; alert("This is first array " + fir

创建第二个数组=到第一个数组,然后对第二个数组执行“移位”,第一个数组也受到影响。请参阅下面的代码。我希望第二个数组在轮班后包含Larry和Moe,第一个数组包含原来的三个元素。换班后,两个阵列都只有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>");
var firstArray=[“Curly”、“Larry”、“Moe”]
var secondArray=firstArray;
var thirdArray=第一个数组;
警报(“这是第一个数组”+firstArray+“
”); secondArray.shift(); 警报(“这是第一个数组”+firstArray+“
”); 警报(“这是第二个数组”+secondArray+“
”); 警报(“这是第三个数组”+thirdArray+“
”;
此处
secondArray
thirdArray
指与
firstArray
相同的数组,而不是新的独立数组

您可以使用它返回数组部分的浅层副本

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>");
var firstArray=[“Curly”、“Larry”、“Moe”]
var secondArray=firstArray.slice();
var thirdArray=firstArray.slice();
警报(“这是第一个数组”+firstArray+“
”); secondArray.shift(); 警报(“这是第一个数组”+firstArray+“
”); 警报(“这是第二个数组”+secondArray+“
”); 警报(“这是第三个数组”+thirdArray+“
”;

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

  • 值类型 实际值存储在变量中。 ex-字符串,数字,布尔值,null,未定义
  • 参考类型 值将存储在不同的位置(堆中),对该值的引用将存储在变量中。对象、数组和函数都是引用类型

    var secondArray=firstArray

  • firstArray存储对先前声明的数组的引用 运行上述代码时,它会将firstArray的引用复制到secondArray变量。在运行到第二行之上之后,secondArray也有firstArray的引用。当你跑的时候

    secondArray.shift();
    
    它将从引用的数组中删除所有三个变量引用的第一个值。 有关更多详细信息,请阅读以下链接

    您可以使用slice方法获取数组的副本,如下所示

    var secondArray = firstArray.slice();
    
    有关其他方法,请参阅下面的链接


    您没有制作数组的副本-
    secondArray
    thirdArray
    都是对同一数组的引用。可能是