关于 assign 的克隆问题(深复制与浅复制)

版权声明:版权声明:本文为博主原创文章,若文章中有错误请联系博主改正,请不要恶意留言(不喜欢请绕道)。欢迎大家转载 https://blog.csdn.net/qq_37674616/article/details/83578003

目录

Object.assign

解决

一、使用 JSON复制

二、loadsh的深复制

三、使用 Jquery中 extend


Object.assign

关于使用Object.assign复制时,对于引用类型里存放引用类型时,此时里面存放引用类型是浅复制。具体事例看测试:

var obj={a:1,b:{name:"cc"}}

var cloneObj=Object.assign({},obj); 

obj.a=2;

cloneObj.a  //1  对于基本数据类型则是深复制

obj.b.name="wcc";
cloneObj.b.name //wcc 对于引用类型则是浅复制(引用地址)

//数组
var arr=[1,{age:12}]
var cloneArr=Object.assign([],arr);
arr[0]=3;
cloneArr[0] //1
arr[1].age=15;
cloneArr[1].age //15  

解决:

一、使用 JSON复制

var obj={a:1,b:{name:"cc"}}

var cloneObj=JSON.Stringify(obj)
cloneObj=JSON.Parse(cloneObj) 

obj.b===cloneObj.b  //false

二、loadsh的深复制

var objects = [{ 'a': 1 }, { 'b': 2 }];
 
var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);

三、使用 Jquery中 extend

var obj={a:1,b:{name:"cc"}}

var cloneObj=$.extend(true,{},obj);


obj.b===cloneObj.b  //false

以上是在项目中碰到的问题,与解决方案...fighting

猜你喜欢

转载自blog.csdn.net/qq_37674616/article/details/83578003