js的深拷贝和浅拷贝

来源:互联网 发布:阿里云域名访问网站 编辑:程序博客网 时间:2024/05/25 19:56
浅拷贝是只复制一层对象属性,是对地址的复制,即复制的两个对象指向同一块地址。
深拷贝是复制所有层对象属性,是对指针的复制,即开辟出一块新的内存地址,将元对象的各个属性逐个复制过去。
浅拷贝代码:
var obj1 = {
a:{b:10}
}

function shallowCopy (obj){
var dst = {};
for(var prop in obj){
if(obj.hasOwnProperty(prop)){
dst[prop] = obj[prop];
}
}
return dst;
}
var obj2 = shallowCopy(obj1);

深拷贝代码:
function deepCopy(obj){
var newObj = {};
if(typeof obj != 'object'){
return obj;
}
for(var attr in obj){
newObj[attr] = deepCopy(obj[attr]);
}
return newObj;
}

var obj3 = deepCopy(obj1);


注:js的深拷贝比较复杂,使用场景不同,变化众多,本文只做简单的代码说明,如有任何问题,可在下方评论区提出,谢谢!