我在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等)时,有人能说出为什么“数组”的值会发生变化吗?
答案 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)方法直接修改手头的数组。因此,如果您在实例上应用任何这些方法,那么该实例将被修改,因此指向该数组的所有变量都将指向该数组的修改版本。