关于深浅拷贝方式的总结
深拷贝和浅拷贝的概念
针对引用类型而言,浅拷贝指的是复制对象的引用,即直接给引用类型赋值,如果拷贝后的对象发生变化,原对象也会发生变化。而深拷贝是真正地对对象进行拷贝,修改拷贝后的新对象并不会对原对象产生任何影响。
实现的几种方式
不完全深拷贝
- Object.assign()
- 拓展运算符 ...
以上两种都是只对对象的首层进行深拷贝,也就是说,当对象中只有一级属性,没有二级属性时,此方法为深拷贝,但是对象中有对象,在二级属性以后就是浅拷贝。(参照下图)

深拷贝
- JSON.stringify 和 JSON.parse
不足之处:对目标对象有要求——无法拷贝属性值为 function 或 undefined
- jquery 库 $.extend(true, target, [obj1])
- lodash 工具库的 cloneDeep 方法
- 递归
//p 为被拷贝对象,c为目标对象
function deepCopy(p, c) {
let target = c || {}
for (let i in p) {
if (typeof p[i] === 'object') {
c[i] = p[i].constructor === Array ? [] : {}
deepCopy(p[i], c[i])
} else {
c[i] = p[i]
}
}
return target
}

浙公网安备 33010602011771号