1. 深拷贝和浅拷贝的区别
深拷贝:拷贝时用一块新的内存存储所拷贝的变量,新变量与旧变量不共享内存,改变新的变量旧变量不会被影响。
浅拷贝:拷贝时只是拷贝了对内存空间的引用,新旧变量共享一片内存,改变新变量,旧变量也随之改变。
2.常见的深拷贝方法
-
数组的slice,concat方法,Array.from()
-
Object.assign()
该方法用于将所有可枚举属性的值从一个或多个源对象(sources)分配到目标对象(target),并返回目标对象。
Object.assign(target, …sources)
需要注意的是,如果原始的对象中还包含着对象的话,就不能使用Object.assign()进行深拷贝,要使用递归遍历的方式进行深拷贝。这种情况下如果使用Object.assign()进行深拷贝,就会出现外层对象成功进行了深拷贝,但内层依然是浅拷贝的情况。
-
JSON方法
JSON.stringify()和JSON.parse() -
拓展运算符
-
通过递归遍历的方式深拷贝对象