深拷贝,思想:循环key值,判断是不是基本数据类型,是,就直接拷贝,不是,递归调用deepCopy方法继续拷贝
。直到所有的key均遍历完成,拷贝完成。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script>
function deepCopy(obj){
let target =Array.isArray(obj)?[]:{
};
//判断 obj是对象还是数组,创建对应的
if(obj && typeof obj === 'object'){
for(let key in obj){
if(obj.hasOwnProperty(key)){
if(obj[key]&&typeof obj[key]==='object'){
target[key]=Array.isArray(obj[key])?[]:{
};
target[key]=deepCopy(obj[key]);
}else{
target[key]=obj[key];
}
}
}
}
return target;
}
const obj1 = {
a : 1, b : 2, newobj: {
a: 1 }}
const obj2 = deepCopy(obj1)
obj1.newobj.a = 2;
console.log(obj1); // { a : 1, b : 2, newobj: { a: 2 }}
console.log(obj2); // { a : 1, b : 2, newobj: { a: 1 }}
</script>
</head>
<body>
</body>
</html>