移动新变量也会改变旧的原始变量

时间:2014-10-19 10:29:19

标签: javascript arrays

这是怎么来的

var prodataTemp = [];
prodataTemp = prodata;  
prodataTemp.shift();

变量prodatTemp和prodata都被转移?我可以在控制台中看到它。

1 个答案:

答案 0 :(得分:1)

将JavaScript对象分配给另一个变量,不会复制内容,但它会使左侧变量,即对右侧表达式的引用。所以,

var prodataTemp = [];

使prodataTemp引用一个空数组然后

prodataTemp = prodata;

使prodataTemp引用相同的数组对象prodata指向。 (因此,prodataTemp)不再引用旧的空数组。

要实际制作副本 ** ,请使用Array.prototype.slice,就像这样

prodataTemp = prodata.slice();

现在,prodataTemp引用数组prodata的副本,因此移位一个不会影响另一个。


** - 制作的副本只是一个浅表副本。因此,如果您有一个数组数组,那么将创建一个新数组,其中包含对旧数组元素的所有引用。因此,改变一个数组元素也会对另一个数组元素产生影响。