浅拷贝
浅拷贝:仅复制了引用,彼此之间的操作会互相影响
let obj1 = {
name:"李四",
age:"18",
sex:"女",
score:"89",
car:["奔驰","宝马","奥迪"]
}
let obj2 = {};
function simpleClone(a,b){
for(var k in a){
b[k] = a[k];
}
}
simpleClone(obj1,obj2);
console.log(obj1);//name: "李四", age: "18", sex: "女", score: "89", car: Array(3)}age: "18"car: (3) ["张⑤", "宝马", "奥迪"]name: "李四"score: "89"sex: "女"
console.log(obj2);//name: "李四", age: "18", sex: "女", score: "89", car: Array(3)}age: "18"car: (3) ["张⑤", "宝马", "奥迪"]name: "李四"score: "89"sex: "女"
obj1.car[0] = "张⑤";
console.log(obj1);//name: "李四", age: "18", sex: "女", score: "89", car: Array(3)}age: "18"car: (3) ["张⑤", "宝马", "奥迪"]name: "李四"score: "89"sex: "女"
console.log(obj2);//name: "李四", age: "18", sex: "女", score: "89", car: Array(3)}age: "18"car: (3) ["张⑤", "宝马", "奥迪"]name: "李四"score: "89"sex: "女"
深拷贝
深拷贝:在堆中重新分配内存,不同的地址,互不影响
let obj3 = {
name:"刘诗雨",
age:"28",
sex:"女",
score:"100"
}
let obj4 = {};
function deepClone(a,b){
for(var key in a){
var item = a[key];
if (item instanceof Array){
b[key] = [];
deepClone(item,b[key]);
}else if (item instanceof Object){
b[key] = {};
deepClone(item,b[key]);
}else{
b[key] = item;
}
}
}
deepClone(obj3,obj4);
console.log(obj3);//{name: "刘诗雨", age: "28", sex: "女", score: "100"}
console.log(obj4);//{name: "刘诗雨", age: "28", sex: "女", score: "100"}
obj3.name = "刘欢";
console.log(obj3);//{name: "刘欢", age: "28", sex: "女", score: "100"}
console.log(obj4);//{name: "刘诗雨", age: "28", sex: "女", score: "100"}