js 浅拷贝和深拷贝

引发思考场景:在vue 父子组件传值的时候在多次调用同一个组件的时候 赋值的数组还没有传给源数组的时候 源数组发生改变,这时我在网上找到方法是将数据JSON 序列化一下,然后 再反序列化一下 父组件值则不会出现同步变化

问题产生:浅拷贝 和深拷贝

1:浅拷贝 只是改变指针指向,没有重新赋值

2:深拷贝 重新赋值存放在堆内存中的对象,变量保存的是一个指针,这个指针指向另一个位置。当需要访问引用类型(如对象,数组等)的值时,首先从栈中获得该对象的地址指针,然后再从堆内存中取得所需的数据。

浅拷贝和深拷贝区别:

先深复制和浅复制只针对像 Object, Array 这样的复杂对象的。简单来说,浅复制只复制一层对象的属性,而深复制则递归复制了所有层级。

浅拷贝 有两层以及两层以上的对象

浅拷贝:

varx = {a:1,b: {f: {g:1} },c: [1,2,3]};

可以使用 Object.assign()方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。

如果只有一层的话 则是深拷贝

深拷贝:

使用JSON 序列化 和反序列化即可  (JSON对象的parse和stringify)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • javaScript的变量类型 javaScript的变量类型基本类型:引用类型: 浅拷贝和深拷贝的区分 浅拷贝浅...
    席坤阅读 1,560评论 0 0
  • 之前,我们讲过js的数据类型与堆内存、栈内存以及数据类型,了解该知识点以后,我们来进一步学习 浅拷贝与深拷贝。 在...
    YINdevelop阅读 3,624评论 0 0
  • 文章开始前。我们必须要知道的是 深浅拷贝是针对于引用数据而言的,对于基本数据类型并没有深浅拷贝的区分。希望此文章 ...
    小小小小的人头阅读 2,817评论 0 3
  • 堆和栈 栈(stack)为自动分配内存空间,它由系统自动释放。堆(heap)则是动态分配内存,大小不定也不会自动释...
    丹丹_ccd5阅读 1,469评论 0 1
  • 浅拷贝的时候如果数据是基本数据类型,那么就如同直接赋值那种,会拷贝其本身,如果除了基本数据类型之外还有一层对象,那...
    码界小生阅读 1,001评论 0 1