用递归实现深拷贝
function deepClone(source){
const targetObj = source.constructor === Array ? [] : {}; // 判断复制的目标是数组还是对象
for(let keys in source){ // 遍历目标
if(source.hasOwnProperty(keys)){
if(source[keys] && typeof source[keys] === 'object'){ // 如果值是对象,就递归一下
targetObj[keys] = source[keys].constructor === Array ? [] : {};
targetObj[keys] = deepClone(source[keys]);
}else{ // 如果不是,就直接赋值
targetObj[keys] = source[keys];
}
}
}
return targetObj;
}
1.使用赋值运算符 = 实现的是浅拷贝,只拷贝对象的引用值
2.JS中数组和对象自带的拷贝方法都是“首层浅拷贝”
3.JSON.parse(JSON.stringify())实现的是深拷贝,但是对目标对象有要求,如果对象中有函数就不能用该方法
转载自JS的深浅拷贝