美文网首页
js对象和数组的深拷贝与浅拷贝

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

作者: 想回到童年 | 来源:发表于2017-11-22 21:14 被阅读0次

    概念

    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对象和数组的深拷贝与浅拷贝

          本文链接:https://www.haomeiwen.com/subject/cxoovxtx.html