浅拷贝
var arr1 = [1, 2, 3];
var arr2 = arr1;
arr2[0] = 0;
console.log(arr1);
console.log(arr2);
这种数组拷贝方式就是浅拷贝,因为JavaScript存储对象都是存地址的,所以浅复制会导致 arr1 和 arr2 指向同一块内存地址,这样更改arr1或者arr2的时候影响的都是同一个数组。
深拷贝
深拷贝的两种方式
slice实现深拷贝
var arr1 = [1, 2, 3];
var arr2 = arr1.slice();
arr2[0]=0;
console.log(arr1);
console.log(arr2);
concat实现深拷贝
var arr1 = [1, 2, 3];
var arr2 = arr1.concat();
arr2[0]=0;
console.log(arr1);
console.log(arr2);
这种数组拷贝方式就是深拷贝,而深拷贝一般都是开辟一块新的内存地址,将原对象的各个属性逐个复制出去。
网友评论