浅拷贝与深拷贝

深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的

 

浅拷贝: 只复制指向某个对象的指针而不复制对象本身,新旧对象还是共享同一块内存

Object.assign() 方法可以把任意多个的源对象自身的可枚举属性拷贝给目标对象,然后返回目标对象。但是 Object.assign()进行的是浅拷贝,拷贝的是对象的属性的引用,而不是对象本身。

 

深拷贝:会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。

深拷贝的实现方式

1.JSON.parse(JSON.stringify())

原理: 用JSON.stringify将对象转成JSON字符串,再用JSON.parse()把字符串解析成对象,一去一来,新的对象产生了,而且对象会开辟新的栈,实现深拷贝。

 

2.手写递归方法

递归方法实现深度克隆原理:遍历对象、数组直到里边都是基本数据类型,然后再去复制,就是深度拷贝;

 

浅拷贝:拷贝的目标对象的地址和源对象的地址的内存空间,是同一块空间,让几个对象共用一个内存。

浅拷贝只拷贝一层,基本数据类型不会相互影响,复杂数据类型会相互影响;

Object.assign(target,sources)实现浅拷贝;其中target是目标对象(新对象),sources是源对象(旧对象),返回目标对象

深拷贝:克隆出一个对象,数据相同,但是引用地址不同,

深拷贝是多层拷贝,每层都会拷贝,改变任意数据,都不会相互影响。

JSON.parse(JSON.stringify(obj))实现深拷贝;首先先转换为json串,然后转化成对象。

posted @ 2023-02-13 10:00  芬-mi  阅读(16)  评论(0编辑  收藏  举报