浅拷贝,深拷贝只针对引用数据类型
直接赋值是直接拷贝对象栈里面的地址,只要是对象,就会相互影响
浅拷贝,简单数据类型直接拷贝值,引用数据类型拷贝地址(单层对象没问题,多层对象有问题)
- 拷贝对象: Object.assign() 展开运算符 {...obj} 拷贝对象
- 拷贝数组: Array.prototype.concat() 或者[...arr]
递归函数:一个函数在内部可以调用自身 ,必须有出口
递归实现深拷贝
function deepCopy(newObj,oldObj){
for(let k in oldObj){
let val = oldObj[k];
if(val instanceof Array){
// let newObj[k] = []; 没有let
newObj[k] = [];
deepCopy(newObj[k],val)
}else if(val instanceof Object ){
newObj[k] = {};
deepCopy(newObj[k],val)
}else{
newObj[k] = val
}
}
}
lodash实现深拷贝
<script src="./lodash.js"></script>
<script>
const o= _.cloneDeep(obj)</script>
利用JSON实现深拷贝
把对象转换为JSON字符串 JSON.parse(JSON.stringify(obj))