【NB】深拷贝与浅拷贝

优选教程   © 文章版权由 admin 解释,禁止匿名转载

#楼主# 2022-8-16

快进来[滑稽]


*#*浅拷贝

浅拷贝,指的是创建新的数据,这个数据有着原始数据属性值的一份精确拷贝
如果属性是基本类型,拷贝的就是基本类型的值。如果属性是引用类型,拷贝的就是内存地址
在JavaScript中,存在浅拷贝的现象有:

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

*#*深拷贝

深拷贝开辟一个新的栈,两个对象属完成相同,但是对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性

常见的深拷贝方式有:

_.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[key] = obj)

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

板凳
NB道子 2022-8-16
大佬[滑稽]
地板
Pluie 2022-8-16
问一下,文中嵌入图片是需要什么条件呀
4楼
Pluie 2022-8-16
就是平时发帖,选择图片默认添加到文末,楼主的图片是嵌入文章的,所以来问问
5楼
TCPIP 2022-8-16
有称号[滑稽]
6楼
TCPIP 2022-8-16
你可以加入NB团队,可以获得图文权限[滑稽](但是现在要的是有技术的)
7楼
Pluie 2022-8-17
哦,技术我倒学的蛮杂的(可以参考我的帖子,都是原创),可惜我随缘上线,不是很适合团队,如果你们团队比较宽松的话可以考虑下, ,或者还有其他获取称号的方式么
8楼
TCPIP 2022-8-17
现在好像一个月至少发一个帖子[滑稽][茶杯][滑稽]
9楼
Pluie 2022-8-17
[滑稽][茶杯]有点悬,我闲的时候可以隔天发,忙的时候可能两三个月不会发帖

是要获得指定称号还是有称号就行?૮ ºﻌºა
10楼
TCPIP 2022-8-17
[滑稽]有称号就能发图文,视频好像是特定称号,反正我图文视频都可以发[滑稽]
我民间大神的称号被这骑士称号顶掉了[滑稽][心碎]

评论

登录后才可发表内容
  • 主题

    61

  • 帖子

    1533

  • 关注者

    0

Copyright © 2019 凯特网.   Powered by HYBBS 2.3.4  

Runtime:0.0471s Mem:2044Kb