深拷贝和浅拷贝的异同以及实现方式
展开全部
相同点:
深拷贝和浅拷贝都是用于对复杂数据类型进行复制。
差异:
其区别在于深拷贝是对原数据进行递归复制,并存到一个新地址,从而使新老数据互不影响。
而浅拷贝只是对原数据的地址进行拷贝,从而会使新老数据相互影响。
常用实现方法:
深拷贝:
1.递归复制(全部适用)
function duplicate(obj) {
var newObj = null;
If(obj !== null && typeof(obj)==obj){
newObj=Obj instanceof Array?[]:{};
For (var i in obj){
newObj[i] = duplicate[i];
}
}else{
newObj = obj;
}
return newObj;
}
2.JSON.stringify(obj);
关于这个方法有一个缺点就是 不能拷贝function和undefine( 在火狐上直接报错error,而在谷歌上会直接忽略掉相关属性) 。因为这是通过把数据转化为字符串的形式赋值给一个新地址。
浅拷贝:
1.函数实现
function simpleDuplicate(obj){
Var newObj ={};
for(var I in obj){
If(obj.hasOwnProperity[i]){
newObj[i] = obj[i];
}
}
return newObj;
}
2.各种赋值、合并删除操作。
深拷贝和浅拷贝都是用于对复杂数据类型进行复制。
差异:
其区别在于深拷贝是对原数据进行递归复制,并存到一个新地址,从而使新老数据互不影响。
而浅拷贝只是对原数据的地址进行拷贝,从而会使新老数据相互影响。
常用实现方法:
深拷贝:
1.递归复制(全部适用)
function duplicate(obj) {
var newObj = null;
If(obj !== null && typeof(obj)==obj){
newObj=Obj instanceof Array?[]:{};
For (var i in obj){
newObj[i] = duplicate[i];
}
}else{
newObj = obj;
}
return newObj;
}
2.JSON.stringify(obj);
关于这个方法有一个缺点就是 不能拷贝function和undefine( 在火狐上直接报错error,而在谷歌上会直接忽略掉相关属性) 。因为这是通过把数据转化为字符串的形式赋值给一个新地址。
浅拷贝:
1.函数实现
function simpleDuplicate(obj){
Var newObj ={};
for(var I in obj){
If(obj.hasOwnProperity[i]){
newObj[i] = obj[i];
}
}
return newObj;
}
2.各种赋值、合并删除操作。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询