Javascript数组一起改变

javascript arrays change together

本文关键字:改变 一起 数组 Javascript      更新时间:2023-09-26

创建第二个数组=第一个数组,然后对第二个数组执行'shift',第一个数组也受到影响。参见下面的代码。我希望第二个数组在转换后包含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>");

这里secondArray &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. 值类型实际值存储在变量中。ex - string, number, boolean, null, undefined
  2. 引用类型值将存储在不同的位置(in Heap),对该值的引用将存储在变量中。对象、数组和函数都是引用类型。

  3. var secondArray = firststarray;

firststarray存储先前声明的数组的引用当您运行上面的代码时,它将firstArray的引用复制到secondArray变量。运行以上行后,secondArray也有firststarray的引用。当你运行

secondArray.shift();

将从所有三个变量引用的数组中删除第一个值。请阅读以下链接了解更多详情
基本值与参考值
http://docstore.mik.ua/orelly/webprog/jscript/ch04_04.htm

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

var secondArray = firstArray.slice();

其他方法请参考下面的链接

复制数组