深浅拷贝的区别和实现
浅拷贝:拷贝一个变量的时候,复制了栈内存,没有复制堆内存。就是浅拷贝出来的变量拷贝的是指针还是指向同一块内存。
深拷贝:拷贝一个变量的时候,复制了栈内存,同时也复制了堆内存。就是深拷贝出来的变量和原来的变量完全分离,互不影响。
浅拷贝的实现:
- Object.assign()
- 利用展开运算符…
- 自己封装一个for…in函数
深拷贝的实现:
-
应用JSON.parse()JSON.Stringify()的方法
JSON.Stringify()是将一个对象转换为JSON类型
JSON.parse()是将一个JSON类型的变量转换为对象
连起来使用就是 JSON.parse( JSON.Stringify()) -
for…in加递归
之所以会出现了深拷贝和浅拷贝,究其根本是因为JS种的变量包含了不同类型的数据值:基本类型和引用类型;同时其中变量的存储方式也不用Object属于堆内存的储存方式;并且JS的值的传递方式如值传递和址传递的会出现不同,所以才会出现这一系列的问题,因此才会使用深拷贝和浅拷贝来解决这些问题。