const obj = {name:"李旭亮",age:20,family:{baby:'yll',}
}
console.log(obj);
// 浅拷贝:拷贝的是地址
const o={...obj};
o.age=200;
console.log(o.age);//200
console.log(obj.age);//20
// ***********************
o.family.baby='xxx';
console.log(obj.family.baby);//xxx 里面的内容仍然会改变
首先浅拷贝和深拷贝只针对引用类型
深拷贝: 拷贝的是对象,不是地址
常见方法:
1.通过递归实现深拷贝
2. lodash/cloneDeep
3.通过JSON.stringify()实现
函数递归:
如果一个函数在内部可以调用其本身
,那么这个函数就是递归函数
必须要加退出条件 return
// 函数递归实现时间输出
function gitTime() {document.querySelector('div').innerHTML=new Date().toLocaleString();setTimeout(gitTime,1000);
}
gitTime();
const obj = {name: "李旭亮",age: 20,family: {baby: 'yll',}
}
let o = {};
function deepCopy(newObj, oldObj) {for (const k in oldObj) {if (oldObj[k] instanceof Array) {console.log(oldObj[k]);newObj[k] = [];deepCopy(newObj, oldObj);} else if (oldObj[k] instanceof Object) {newObj[k] = {};deepCopy(newObj[k], oldObj[k])} else {newObj[k] = oldObj[k];}}
}
deepCopy(o, obj);
console.log(o);
o.family.baby = 'xxx';
console.log(o.family.baby);
console.log(obj.family.baby);
const obj = {name: 'lxl',age: 18,books: ['JavaScript', '语文'],family: {baby: 'xxx',}
}
const newObj = JSON.parse(JSON.stringify(obj));
// 将新对象的baby改名
newObj.family.baby = 'lxl';
// 观察旧对象的baby有没有变化
console.log(obj.family.baby);//xxx
下一篇:Oracle 常用命令