const data = {
name: 'cp',
age: 20,
list: [{
height: 180
}],
info: {
msg: '123'
}
}
function deepCopy(source) {
if (!isObject(source)) return source //如果不是对象的话直接返回
let target = Array.isArray(source) ? [] : {} //数组兼容
for (let k in source) {
if (source.hasOwnProperty(k)) {
if (typeof source[k] === 'object') {
target[k] = deepCopy(source[k])
} else {
target[k] = source[k]
}
}
}
return target
}
const newData = deepCopy(data)
深拷贝就是在栈上面不是同一个地址,修改拷贝过来的值,原来的值不变,这是深拷贝.
浅拷贝就是在栈上面是同一个地址,修改过来的值,原来的值也跟着变,这是浅拷贝.
一句话: 拷贝的值修改的话原来的值发生变化就是浅拷贝,没变就是深拷贝!