今天在vue里面写一个地址的表单修改功能,发现直接拿了row的数据之后,给了一个对象,但是发现我在弹出的表单框去改那些值,下面一层的地址原数据也在进行变化。
我重新理了一下逻辑,正常来说我用来临时提交用的新建的一个临时对象,应该没有双向绑定到显示地址的那边的数据的,那为什么两者数据绑定到了一起呢。
- 深拷贝就是这样出现的了,借鉴了大神的解释
- 引用数据类型--名存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引用的地址指向堆内存中的值
- 当b=a进行拷贝时,其实复制的是a的引用地址,而并非堆里面的值。
- 而当我们a[0]=1时进行数组修改时,由于a与b指向的是同一个地址,所以自然b也受了影响,这就是所谓的浅拷贝了。
- 那,要是在堆内存中也开辟一个新的内存专门为b存放值,就像基本类型那样,岂不就达到深拷贝的效果了
- 深拷贝仅出现在引用类型上面
- 因此参考了大神的解决方法,觉得如果没有太多特殊的数据
布尔和undefined那种特殊类型,就可以直接使用json转换的方法来解决 -
let _obj = JSON.stringify(obj), objClone = JSON.parse(_obj); return objClone } - 因为小弟比较菜。所以对递归有点陌生不太敢使用。所以这次笔记就到这里了 有错请务必告诉小弟