浅拷贝就是复制某个对象的指针,新旧对象共享一个内存;深拷贝就是新旧对象各自占一块内存,不共享内存,新旧对象保持 不变
var a = 25;
var b = a;
b = 10;
console.log(a);//25
console.log(b);//10
//浅拷贝
var obj1 = { a: 10, b: 20, c: 30 };
var obj2 = obj1;
obj2.b = 40;
console.log(obj1);// { a: 10, b: 40, c: 30 }
console.log(obj2);// { a: 10, b: 40, c: 30 }
//深拷贝
var obj1 = { a: 10, b: 20, c: 30 };
var obj2 = { a: obj1.a, b: obj1.b, c: obj1.c };
obj2.b = 40;
console.log(obj1);// { a: 10, b: 20, c: 30 }
console.log(obj2);// { a: 10, b: 40, c: 30 }
貌似我们在日常工作中常用的就是浅拷贝,怎么实现深拷贝呢.即新旧对象互不干扰.
浅拷贝的实现
var json1={"a":"name","arr1":[1,2,3,4]}
function copy(obj1){
var obj2 = {};
for(var i in obj1){
obj2[i] = obj[i];
}
return obj2;
}
var json2 = copy(json1);
json1.arr.push(4);
alert(json1.arr1); // 1234
alert(json2.arr2); // 1234
深拷贝的实现
// 方法1
let foo = { a:1,b:2,c:{ d:1 } }
let bar = {};
Object.assign(bar,foo); //这种深拷贝的方式针对于对象嵌套就木有用了
foo.c.d++; // 浅拷贝 1,2,2 1,2,2
foo.a++; // 深拷贝2,2,1 1,2,1
console.log(foo,bar);
// 方法2
var obj1 = {body:{a:10}};
var obj2 = JSON.parse(JSON.stringify(obj1));
obj1.body.a = 20;
console.log(obj1,obj2);//20,10
网友评论