**
复杂类型的深拷贝与浅拷贝**(如键值对的无序对象、数组等等)
浅拷贝:浅拷贝就相当于复制复杂类型的一个指针(引用),当修改这个对象时,另外一个对象也会跟着改变。例如:let a = {a:1}; b = a; 此时修改a的属性时,b也会随之改变。
let obj= { name: "张三", age:12 };
let obj2 = obj;
深拷贝:深拷贝就是把这个对象完完全全的拷贝过来,他们之间再也没有任何关系。此时在修改这个对象,完全不会影响另一个对象,因为他们指向了不同的指针(引用)。
let obj = {
name:'张三',
arr:[],
obj2:{
name:"小三",
}
};
function shen(e){
let obj2 = e instanceof Array ? [] : {};
for(const key in e){
typeof e[key] != 'object' ? obj2[key] = e[key] : obj2[key] = shen(e[key]);
}
return obj2;
}
let obj2 = shen(obj)
obj.obj2.name = '李四'
console.log(obj2);
console.log(obj)
如果对象里面有方法也没问题
let obj = {
name:'张三',
arr:[],
fn:function(){
console.log('dsa')
},
obj2:{
name:"小三",
}
};
function shen(e){
let obj2 = e instanceof Array ? [] : {};
for(const key in e){
typeof e[key] != 'object' ? obj2[key] = e[key] : obj2[key] = shen(e[key]);
}
return obj2;
}
let obj2 = shen(obj)
obj.obj2.name = '李四'
console.log(obj2);
console.log(obj)