js运用递归实现浅拷和深拷贝
2021-03-21 04:25
标签:car 不能 inf 定义 对象属性 深拷贝 item 数组 source 浅拷贝:不能拷贝对象中的复杂属性 如 数组 和 内部的引用对象 深拷贝:两个对象完全独立存在 js运用递归实现浅拷和深拷贝 标签:car 不能 inf 定义 对象属性 深拷贝 item 数组 source 原文地址:https://www.cnblogs.com/gaoSJ/p/12727095.html //运用递归实现js的浅拷贝和深拷贝
var obj1 = {
name : ‘zs‘,
age : 18,
dog:{
name:‘大黄‘,
age:3
}
};
var obj2 = {};
//完成对象的拷贝 浅拷贝主要能拷贝一些基本的属性不能拷贝对象属性 当改变原对象改变所属对象的属性时拷贝的对象也会跟着改变
for(var key in obj1){
obj2[key] = obj1[key];
}
obj1.dog.name = "xxxxxxx"; //虽然上面 obj2 拷贝了 obj1 但是当obj1的所属对象发生改变时 obj2也会更正发生变化 这个就叫浅拷贝
console.dir(obj2);
//对象1
var obj1 = {
name : ‘zs‘,
age : 18,
dog:{
name:‘大黄‘,
age:3
},
cars:["qq","jeep"]
};
//对象2
var obj2 = {};
function deepCopy(source, target) {
for(var key in source){
var item = source[key];
if(item instanceof Object){
target[key] = {}; //定义一个空的对象来接收拷贝的内容
deepCopy(item,target[key]); //递归调用
}else if(item instanceof Array){
target[key]=[];
deepCopy(item,target[key]);
}else {
target[key] = source[key];
}
}
}
deepCopy(obj1,obj2);
obj1.dog.name = "xxxxxxx";
console.dir(obj1);
console.dir(obj2);