一、遇到的问题:
写了以下的一段js
var a = [a,b,c];
var c = a;
c.push(d);
然后console.log(a);会发现a中也多了d;
二、查找资料并找到原因:
因为在js中,对象和数组都是引用传递,所谓引用传递就是当变量
c赋值为数组
a后,
a和c便指向了同一个地址,这个地址的值便是
[a,b,c]这个数组,所以当修改c
,也就是修改了c指
向地址的数组,而
a也指向这个数组,所以
a的值也会跟着变化
三、总结:
js中的赋值是分为深层拷贝以及浅层拷贝的,我们通常所用的“=”赋值,其实都是属于浅拷贝,也就是如图所示:
而如果想达到值传递的效果,也就是改变c而不引起a的改变,则可以使用json解析反解析的方式实现,具体使用如下:c = JSON.parse(JSON.stringify(a));也就达到了如图所示的效果: