js深拷贝和浅拷贝

小文blog小文 2018-07-27 15:08 770人围观

数组的深浅拷贝

在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份,事实证明如果只是简单的将它赋予其他变量,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致了问题的发生。

var arr = ["One","Two","Three"];
var _arr = arr;
_arr[1] = "2";
console.log(arr);//One,2,Three
console.log(_arr);//One,2,Three

像上面的这种直接赋值的方式就是浅拷贝,也就是arr和_arr引用的还是同一个数组。

//slice
var arr = ["One","Two","Three"];
var _arr = arr.slice(0);
_arr[1] = "2";
console.log(arr);//One,Two,Three
console.log(_arr);//One,2,Three
//concat
var arr = ["One","Two","Three"];
var _arr = arr.concat();
_arr[1] = "2";
console.log(arr);//One,Two,Three
console.log(_arr);//One,2,Three

对象的深浅拷贝

var a={name:'yy',age:26};
var b=a;
a.name='xx';
console.log(b);//{ name="xx", age=26}
console.log(a);//{ name="xx", age=26}

上面的这种原理一样,解决就是重新声明一个对象进行赋值

var a={name:'yy',age:26};
var b=new Object();
b.name=a.name;
b.age=a.age;
a.name='xx';
console.log(b);//{ name="yy", age=26}
console.log(a);//{ name="xx", age=26}
//json对象深层迭代,写个函数
var deepCopy= function(source) { 
var result={};
for (var key in source) {
      result[key] = typeof source[key]===’object’? deepCoyp(source[key]): source[key];
   } 
   return result; 
}


转载请注明来自小文blog,本文标题:js深拷贝和浅拷贝

发布评论
生活是一场戏,主角当累了,你亦可成为观众,停下脚步,歇一歇