村长 发表于 2022-11-14 08:23:11

【NB】深拷贝与浅拷贝


快进来[滑稽]http://cdn.u1.huluxia.com/g4/M02/7D/7C/rBAAdmL7Z4mAfflsAAO4_BHsxHw090.jpg

*#*浅拷贝http://cdn.u1.huluxia.com/g4/M02/7D/7C/rBAAdmL7Z4qABRE3AAKNb6sKS1o404.jpg
浅拷贝,指的是创建新的数据,这个数据有着原始数据属性值的一份精确拷贝
如果属性是基本类型,拷贝的就是基本类型的值。如果属性是引用类型,拷贝的就是内存地址
在JavaScript中,存在浅拷贝的现象有:

Object.assign
Array.prototype.slice(), Array.prototype.concat()
使用拓展运算符实现的复制

*#*深拷贝http://cdn.u1.huluxia.com/g4/M02/7D/7C/rBAAdmL7Z4qAB5OWAANfC_3qXIs777.jpg
深拷贝开辟一个新的栈,两个对象属完成相同,但是对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性

常见的深拷贝方式有:

_.cloneDeep()
jQuery.extend()
JSON.stringify()
手写循环递归
JSON.parse(JSON.stringify)为什么可以实现深拷贝?

使用JSON.stringify将对象序列化,转成字符串后,存储在硬盘上,在通过JSON.parse()反序列化,将字符串转成对象

实现深拷贝的缺点?

会将JS对象中的时间对象转化为字符串 会将JS对象中的RegExp、Error对象转化为空对象 会将JS对象中的function、undefined、Symbol丢失 会将JS对象中的NaN、Infinity和-Infinity转化为null 会将JS对象中有构造函数生成的对象的 constructor 丢失 如果JS对象存在循环引入将无法实现深拷贝

通过JSON.stringify实现深拷贝有几点要注意

1. 拷贝的对象的值中如果有函数,undefined,symbol则经过JSON.stringify()序列化后的JSON字符串中这个键值对会消失
2. 无法拷贝不可枚举的属性,无法拷贝对象的原型链
3. 拷贝Date引用类型会变成字符串
4. 拷贝RegExp引用类型会变成空对象
5. 对象中含有NaN、Infinity和-Infinity,则序列化的结果会变成null
6. 无法拷贝对象的循环应用(即obj = obj)

总结
1. 深拷贝递归地复制新对象中的所有值或属性,而拷贝只复制引用。
2. 在深拷贝中,新对象中的更改不会影响原始对象,而在浅拷贝中,新对象中的更改,原始对象中也会跟着改。
3. 在深拷贝中,原始对象不与新对象共享相同的属性,而在浅拷贝中,它们具有相同的属性。
页: [1]
查看完整版本: 【NB】深拷贝与浅拷贝

村长黑科技是专业提供项目资源的服务的村长黑科技平台,如合购网赚项目、引流推广软件、软件程序开发等项目就选村长黑科
技平台参与或发布项目定制各种软件就来村长黑科技平台

本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件的破解分析文章、破解分析视频、补丁、注册机和注册信息,

仅限用于学习和研究软件安全的目的。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习破解分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,

请购买注册正版软件,获得正版优质服务!不允许将上述内容私自传播、销售或者其他任何非法用途!否则,产生任何法律责任,一切后果请用户自负,与本网站无关!如有侵权或非法用途请举报!请发送到邮箱:cxphj8@foxmail.com

《意见反馈》或《截图指定页面备注》发送到邮件,收到后24小时内删除,禁止用户学习使用关掉用户【学习使用权】!