JavaScript中浅拷贝和深拷贝的区别和实现

2023-05-27 0 729

序言

要认知 JavaScript中浅复本和深复本的差别,具体来说要知道JavaScript的正则表达式。JavaScript有三种正则表达式,此基础正则表达式和提及正则表达式。

1. 此基础正则表达式: undefined、boolean、number、string、null,留存在栈缓存中的单纯统计数据

2. 提及正则表达式:Array、第一类、Function,留存在堆内存空间中

简述

如下表所示图:

JavaScript中浅拷贝和深拷贝的区别和实现

JavaScript中浅复本和深复本的差别和同时实现

注解:

a1 = 0;a2 = this is str;a3 = null, 存放在栈缓存中;

var c =[1,2,3] 与 var d = {m:20} ,**cp与缓存地址储存在栈缓存中**,**但**[1,2,3]与{m:20} 做为**第一类储存在堆缓存中**;

此基础正则表达式的拷贝

var a = 20; var b = a;

如下表所示图:

JavaScript中浅拷贝和深拷贝的区别和实现

JavaScript中浅复本和深复本的差别和同时实现

提及正则表达式的拷贝

var m ={ a:10, b:20 }; var n = m;
JavaScript中浅拷贝和深拷贝的区别和实现

JavaScript中浅复本和深复本的差别和同时实现

m与n指向同一个缓存空间,当m或者n改变时,另一个也跟着改变

m.a = web秀; console.log(n.a); // 输出 web秀

怎么样使提及正则表达式有各自独立的缓存空间???

深度复本方法

采用递归的方法复本第一类

JavaScript中浅拷贝和深拷贝的区别和实现

JavaScript中浅复本和深复本的差别和同时实现

## 奇技淫巧

利用**此基础数据类型**方式,把第一类转换成字符串,进行拷贝。具体点说就是,用JSON.stringify与JSON.parse同时实现深复本。原因是JSON.stringify(obj)转换成字符串,变成基本正则表达式,基本类型复本是直接在栈缓存新开空间,直接拷贝一份名-值,不影响之前的第一类。请看代码:

JavaScript中浅拷贝和深拷贝的区别和实现

JavaScript中浅复本和深复本的差别和同时实现

总结

1. 浅复本(shallow copy):只拷贝指向某个第一类的指针,而不拷贝第一类本身,新旧第一类共享一块缓存;

2. 深复本(deep copy):拷贝并创建一个一摸一样的第一类,不共享缓存,修改新第一类,旧第一类保持不变;

同时实现深复本主要有2种方法

(1)递归

(2)JSON.stringify结合JSON.parse

公告

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务