关于深浅拷贝的原理介绍可以看之前的文章——超清晰,一文理解深浅拷贝
浅拷贝和深拷贝的区别及实现:
- 浅拷贝:一般指的是把对象的第一层拷贝到一个新对象上去,比如
let a = { count: 0, in: { count: 1 } } let b = Object.assign({}, a) // 等价于 let b = {...a} a.in.count = 2 b.in.count // 2
- 深拷贝:一般需要借助递归实现,如果对象的值还是个对象,要进一步的深入拷贝,完全替换掉每一个复杂类型的引用。
var deepCopy = (obj) => { var res = {} for (let key in obj) { var value = obj[key] ret[key] = typeof value === 'object' ? deepCopy(value) : value } return res }
let a = { count: 0, in: { count: 1 } } let b = deepCopy(a) a.in.count = 2 b.in.count // 1