浅拷贝和深拷贝的区别

区别:

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

2、深拷贝会创造一个一模一样的对象,新对象和原对象不共享内存,修改新对象不会改变原对象。

注意:

解构赋值,如果所解构的原对象是一维数组或对象,其本质就是对基本数据类型进行等号赋值,那它就是深拷贝;如果是多维数组或对象,其本质就是对引用类型数据进行等号赋值,那它就是浅拷贝。

实现方式:

浅拷贝:

1、基于Object.assign

2、基于for in

3、...原地展开

深拷贝:

1、借用JSON对象的parse和stringify

2、使用递归的方式

3、Object.assign()拷贝,当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。

4、lodash函数库 提供了lodash.cloneDeep()


拓展:

基本类型:Number、String 、Boolean、Null和Undefined。基本数据类型是按值访问的,因为可以直接操作保存在变量中的实际值

引用类型:Object、Array 、Function 、Data等。引用数据类型是保存在堆内存中的对象,只能操作对象在栈内存中的引用地址

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

推荐阅读更多精彩内容