js对象和数组的深拷贝与浅拷贝

概念

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;
    },

你可能感兴趣的:(js对象和数组的深拷贝与浅拷贝)