浅拷贝:一般指的是把对象的第一层拷贝到一个新对象上去,比如
var a = { count: 1, deep: { count: 2 } }
var b = Object.assign({ }, a)
或者
var c = { ...a }
console.log(b) // { count: 1, deep: { count: 2 } }
console.log(c) // { count: 1, deep: { count: 2 } }
深拷贝:一般需要借助递归实现拷贝,如果对象的值还是个对象,要进一步的深入拷贝,完全替换掉每一个复杂类型的引用
var deepCopy = (obj) => {
var ret = {}
for(let key in obj) {
var value = obj[key]
ret[key] = typeof value === 'object' ? deepCopy(value) : value
}
return ret
}
对于同一个用例来说
a.deep.count = 5
console.log(b.deep.count) // 5
var e = deepCopy(a)
a.deep.count = 5
console.log(e.deep.count) // 2
总结:浅拷贝改变其拷贝的值会影响到其本身,而深拷贝不会,深拷贝则是开出另外的地址值去储存这个拷贝出来的结果,浅拷贝则是相同地址值。