Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript数组分配问题_Javascript_Arrays_Angularjs - Fatal编程技术网

JavaScript数组分配问题

JavaScript数组分配问题,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我刚刚创建了两个数组,并为其中一个数组分配了一个插入的键值对。然后我将一个数组分配或复制到另一个数组。之后,我将另一个键值对添加到第二个数组中,但它也会反映到原始数组中。比如说 var array1 =[]; var array2 =[]; array1.value1 ='1'; array2 = array1; array2.value2 ='2'; console.log(array1); // it prints {value1:1, value2:2} 为什么在我为array2添加键值

我刚刚创建了两个数组,并为其中一个数组分配了一个插入的键值对。然后我将一个数组分配或复制到另一个数组。之后,我将另一个键值对添加到第二个数组中,但它也会反映到原始数组中。比如说

var array1 =[];
var array2 =[];
array1.value1 ='1';
array2 = array1;
array2.value2 ='2';
console.log(array1); // it prints {value1:1, value2:2}

为什么在我为array2添加键值对时更改array1对象?

当您执行类似于
array2=array1
您只是将
array2
设置为对
array1
的引用。要复制array1,需要执行
array2=array1.slice()

此外,不能使用
array1.value1='1'设置元素。您在那里所做的是将数组转换为。所以你真正应该做的是:

var array1 = [];
var array2 = [];
array1[0] = 1;
array2 = array1.slice();
array2[1] = 2;

通过执行
array2=array1将array1对象指定给array2变量。因此,修改array2将修改关联的对象,即array1

,因为您通过引用将
array1
传递到
array2
。您需要进行如下复制:

array2 = new Array(array1); array2=新阵列(array1);
很明显你不是在复制。而且你没有正确地使用数组。重复了以前许多人提出的问题。我会去找其中一个DUP。@jfriend00:虽然参考问题的答案也回答了这个问题,但我不认为这个问题是那个问题的重复。我并不怀疑这可能是某个东西的副本。这里有一个处理对象赋值复制的期望:@squint-并且您的引用实际上被标记为这个的dup:。有很多很多可供选择。这实际上不起作用。它创建了一个数组,数组中的项目是array1。我不知道。不过,我反驳道::-)@斯科特萨耶:我也是。现在有两个人投了赞成票。