1.理解浅复制和深复制:
原因:
在js里面,有值类型和引用类型,当你直接把一个引用类型进行复制的时候,只是复制了一个地址
当复制的对象和被复制对象一方,通过地址修改数据的时候,地址指向的数据变化,二者相互影响
这就是浅拷贝...
深拷贝:
就是复制一般引用类型的时候,不只是复制地址,而是新开辟一个空间,二者相互独立,修改一个另一个不会发生改变
2.实现:
0.假设我的数据为:
var obj={ a:1, b:[1,2,3], c:{ name:"jkj", sex:"male" } }
1.浅拷贝:
function shallowCopy(src) { var dst={}; for(var prop in src){ if(src.hasOwnProperty(prop)){ dst[prop]=src[prop]; } } return dst; }
2.使用递归方法实现的深拷贝:(有个问题--函数也是引用类型,但是这里面没有判断??)
function deepCopy(src,target){ /* * 考虑是不是需要在之前已有的对象上,进行追加() * 或者,直接拷贝在一个新的对象里面 * */ var target=target||{}; for(var prop in src){ if(typeof src[prop]==='object'){ if(Array.isArray(src[prop])){ target[prop]=[]; }else{ target[prop]={}; } deepCopy(target[prop],src[prop]) }else{ target[prop]=src[prop]; } } return target; }
3.使用json的解析来实现,简单粗暴(底层应该也是递归吧)
var temp=JSON.stringify(obj); var res=JSON.parse(temp); res.c=333; console.log(res.c,obj.c);
浅深拷贝解析

被折叠的 条评论
为什么被折叠?



