概念
1.浅拷贝
var a = [1,2,3];
var b = a;
a[1]=4;
b[1]=4;//正确
上述写法,将a数组赋值b数组,a的指针与b的指针相等,所有二者指向的堆栈区域相同;所有改变一个,二者都会发生响应的变化。对象也是如此。
2.深拷贝
核心:将两个对象或数组赋值,且只想改变其中一个不想改变另一个,采用如下方法。数组的话,可以用slice,concat方法进行处理获取想要的值,主要这两个方法都是得到了一个新的数组,我们深拷贝的目的就是让它们开辟新的内存,里面的值相等而已。 如果各种方法都解决不了,请用下面这组代码。
function deepCopy(p,c) { //深拷贝 p是要拷贝的对象
var c = c||{};
for (let i in p) {
if (typeof p[i] === 'object') {
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
}
}
return c;
},
网友评论