概念:浅拷贝是拷贝堆内存的地址,而深拷贝是拷贝堆内存中的值
JS只提供了一个赋值运算符去拷贝它的地址,JS没有提供给我们去拷贝堆内存中值的方法,我们平时用的Object.assign
和展开运算符看似可以实现对象的拷贝,而它们对于对象属性的拷贝也是浅拷贝;
一、实现深拷贝的多种方法:
1.JSON字符串转化
JSON.parse(JSON.stringify(object))
2.递归拷贝(用for in 对入参obj的keys进行遍历,并一个一个的copy到newobj上)
for(let i in obj){ newobj[i]=copy(obj[i]); }
二、浅拷贝方法
1.for···in只循环第一层
for (let i in obj1) { obj2[i] = obj1[i]; }
2.Object.assign方法
var obj1 = Object.assign(obj);
3.直接用=赋值
obj1 = obj2
在实际应用中,比如在点击事件btnClick(item),想要将这个item赋值给v-modle绑定的数据时,就不能使用浅拷贝,否则两者指向同一地址,item值会被改变(说的很粗略,踩过的坑自己记录一下)