通过这种方式能实现深层拷贝,而且能自由控制拷贝是如何进行的,如:当B中有和A同名的属性,要不要重新赋值?这些都可以进行控制,但是代码相对复杂一些 。
JSON.parse()和JSON.stringify
var B=JSON.parse(JSON.stringify(A));B.data.num=5;console.log(A.data.num); //10,A中属性值并没有改变,说明是深拷贝用这种方式实现深拷贝的时候要 注意 , 函数是无法进行拷贝的,会被丢失 ,上述代码中B也并没有拷贝出A中的say函数,这和JSON.stringify方法的规则有关系,它在序列化的时候会直接忽略函数,因此最后A中的say函数没有被拷贝到B,关于JSON.stringify序列化的具体规则见JSON.stringify指南 。
深拷贝总结
递归:使用递归进行深拷贝时比较灵活,但是代码较为复杂;
JSON对象:JSON对象方法实现深拷贝时比较简单,但是当拷贝对象包含方法时,方法会被丢失;
因此使用者可按自身的使用场景来选择拷贝方式
推荐阅读
- 5张图彻底理解Python中的浅拷贝与深拷贝
- 扎心|考上985很了不起吗?资深班主任告诉你,现实真的很扎心
- 水族店老板原来是这样“套路”观赏鱼新手的!其实你能反套路他们
- 华为手机怎样自定义“充电语音提醒”?原来这么简单,赶紧试试吧
- 手机卡顿,原来罪魁祸首是这5个开关,关掉瞬间流畅
- 原来华为手机拍照这么好用!打开这5个功能,随手一拍都是大片
- 梦见自己掉进了泥潭里越陷越深 梦见陷在淤泥里
- 手机上的视频照片,怎样存到U盘或移动硬盘里?原来方法这么简单
- 买了iPhone13原来的数据怎么办?旧手机迁移资料到新手机,很简单
- 深呼吸运动怎么做?
