在项目当中遇到这样一个问题,我是用v-model跟这个addForm绑定一些值,添加一行的时候把这个addForm push到data1里面,可是后来发现,当我改了addForm的属性的时候,data1里面已经push进去的数据也全都会随着addForm的改变而改变,看了好久,恍然大悟,发现会不会是深浅拷贝的问题,试了一下,果然是
1.原理
- 浅拷贝:新对象赋值,只是取的旧对象栈中的值,也就是引用对象的值。上述问题也就是连指向都复制了,所以造成数据全都改变
- 深拷贝:会在堆里边开辟一个空间,存放自己的对象值
2.解决办法
let form = JSON.parse(JSON.stringify(this.addForm));
this.data1.push(form);
JSON.stringify()对象转为串,JSON.parse()串转为对象,JSON操作是深拷贝操作,这样转化一下就好了