浅拷贝与深拷贝

深拷贝和浅拷贝是只针对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 @   芬-mi  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示