深拷贝是针对引用类型而言的
- 我们开发中常用的是:
- 在这里插入代码片
JSON.parse(JSON.stringify());
这种能解决80%的问题,但是对于正则或者方法就不能深拷贝。
正确的方法如下:
function deepClone(source){
// 先判断是数组还是对象
//[]=>Array 基类 {}=>Object
const targetObj= source.constructor===Array?[]:{};
for(let keys in source){
if(source.hasOwnProperty(keys)){
if(source[keys]&& typeof source[keys]==='object')//keys是3种基础数据类型
{ //这句话实际上是可以省略的,相当于提示作用
targetObj[keys]= source.constructor===Array?[]:{};
//分为数组和对象
targetObj[keys] =deepClone(source[keys])
}
//基本数据类型,直接赋值
else{
targetObj[keys]=source[keys];
}
}
}
return targetObj;
}
let obj={
name:'周冬东',
age:[1,2,4],
hobby:{
song:"像我这样的人"
}
}
let targetObj = deepClone(obj);
obj.grade=100;
console.log(obj,targetObj);
结果