复制Javascript数组

时间:2014-01-26 17:17:44

标签: javascript

我在Chrome开发者控制台上尝试了以下代码

array = [1,2,3]
[1, 2, 3]
copyarray = array
[1, 2, 3]
copyarray = [1]
[1]
array
[1, 2, 3]
copyarray = array 
[1, 2, 3]
copyarray
[1, 2, 3]
copyarray.pop()
3
copyarray
[1, 2]
array
[1, 2]
copyarray+''
"1,2"
copyarray = copyarray +''
"1,2"
array
[1, 2]

当我在“copyarray”变量上使用一些Array方法(如pop splice等)时,有人能说出为什么“数组”的值会发生变化吗?

4 个答案:

答案 0 :(得分:2)

因为当您将一个变量的值分配给另一个变量时,您正在将引用的副本复制到(单个)数组对象。 JavaScript不提供用于制作对象的完整副本的基本操作。最接近的可能是数组上的.slice()方法:

var copyarray = array.slice(0);

现在有两个数组,对一个数组的修改不会影响另一个。

答案 1 :(得分:2)

Javascript通过引用而不是值来分配对象。你有两个名称引用同一个对象。

听起来你想要clone your array

答案 2 :(得分:1)

因为这些是参考。但是,你可以这样做,这将克隆数组。

var copyarray = array.slice(0);

而不是:

copyarray = array 

另一种选择是创建原型。

Array.prototype.clone = function() {
    return this.slice(0);
};

var copyarray = array.clone();

答案 3 :(得分:0)

well copyarray和array都指向同一个数组对象,另一方面pop和splice(不是slice)方法直接修改手头的数组。因此,如果您在实例上应用任何这些方法,那么该实例将被修改,因此指向该数组的所有变量都将指向该数组的修改版本。