对象的复制引起的深拷贝与浅拷贝

今天在vue里面写一个地址的表单修改功能,发现直接拿了row的数据以后,给了一个对象,可是发现我在弹出的表单框去改那些值,下面一层的地址原数据也在进行变化。

我从新理了一下逻辑,正常来讲我用来临时提交用的新建的一个临时对象,应该没有双向绑定到显示地址的那边的数据的,那为何二者数据绑定到了一块儿呢。

  • 深拷贝就是这样出现的了,借鉴了大神的解释
  1. 引用数据类型--名存在栈内存中,值存在于堆内存中,可是栈内存会提供一个引用的地址指向堆内存中的值
  2. 当b=a进行拷贝时,其实复制的是a的引用地址,而并不是堆里面的值。
  3. 而当咱们a[0]=1时进行数组修改时,因为a与b指向的是同一个地址,因此天然b也受了影响,这就是所谓的浅拷贝了。
  4. 那,要是在堆内存中也开辟一个新的内存专门为b存放值,就像基本类型那样,岂不就达到深拷贝的效果了
  5. 深拷贝仅出如今引用类型上面
  • 所以参考了大神的解决方法,以为若是没有太多特殊的数据布尔和undefined那种特殊类型,就能够直接使用json转换的方法来解决
  • let _obj = JSON.stringify(obj),
        objClone = JSON.parse(_obj);
    return objClone
    }   
    复制代码
  • 由于小弟比较菜。因此对递归有点陌生不太敢使用。因此此次笔记就到这里了 有错请务必告诉小弟
相关文章
相关标签/搜索