关于javascript:我无法复制数组

i can't copy the array

本问题已经有最佳答案,请猛点这里访问。

我无法复制数组。

1
2
var Mycollection = new Array("James","Jonh","Mary");
var Mycollection2 = Mycollection;

在第一个数组中所做的任何更改也将在第二个数组中进行。

1
2
3
Mycollection.pop();
console.log(Mycollection.toString()) // ["James","Jonh"]
console.log(Mycollection2.toString())// ["James","Jonh"]

但是,当我使用文本类型的变量时,不会发生这种情况。


数组是对象,与字符串、int等基元类型不同…获取对象的变量与对象的引用(指针)相对应,而不是对象本身,因此不同的变量可以引用同一个对象。基元类型的变量(字符串、int等)是否与值关联??

在您的情况下,您必须克隆对象数组以获得相同的值??

1
2
var Mycollection = new Array("James","Jonh","Mary");
var Mycollection2 = Mycollection.slice();

Javascript通过引用传递数组,让单独的数组执行以下操作:

1
2
var Mycollection = new Array("James","Jonh","Mary");
var Mycollection2 = Mycollection.slice();


您实际上是在复制代码中的引用,

1
2
var Mycollection = new Array("James","Jonh","Mary");
var Mycollection2 = Mycollection; // makes both Mycollection2 and Mycollection referring  to same array.

使用array.slice()方法创建数组的部分/全部副本。

1
2
3
4
5
6
var Mycollection1 = new Array("James","Jonh","Mary");
var Mycollection2 = Mycollection.slice();

Mycollection1.pop();
console.log(Mycollection1.toString()) // ["James","Jonh"]
console.log(Mycollection2.toString()) // ["James","Jonh","marry"]

imoB


只需使用:

var Mycollection2 = Mycollection.slice(0);

复制数组