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;
    },
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容