Javascript中的深拷贝和浅拷贝

时间:2021-09-23 13:57:08
var obj = { a:1, arr: [1,2] };
var obj1 = obj; //浅复制
var obj2 = deepCopy(obj); //深复制

  javascript中创建对象都是存地址的,而浅拷贝的结果就是obj和obj1都指向了同一个地址,此时如果对其中obj或obj1中的任一一个元素做修改都会影响到另外一个

obj.a = 2;
console.log(obj1.a); //2

  而深拷贝是将对象中的所有属性一个个拷出来在另外一个区域开辟一个空间存储这些属性

var myObj = {
str: "myString",
num : 1,
myArr: [{
arrgo : "I Am go"
}],
obj: {
innerobj : {
test : 25
},
innerstr: "myobjstring"
}
} //深拷贝
function deepCopy(obj) {
var ret, k, b;
ret = (obj instanceof Array) ? [] : {}; for(k in obj) {
if((obj[k] instanceof Array) || (obj[k] instanceof Object)) {
        //利用递归逐个复制obj中的属性
ret[k] = clone(obj[k]);
} else {
ret[k] = obj[k];
}
}
return ret;
}