JavaScript——浅拷贝和深拷贝

若如初见. 提交于 2019-12-28 20:29:07

浅拷贝:拷贝后的结果会随着被拷贝元素改变而改变(类似于C语言中,拷贝了指向该元素的指针)

     var obj1 = {
            name: 'manman',
            number: [1, 2, 3]
        }
        var obj2 = obj1;
        obj1.name = "newmanman"
        console.log(obj1, obj2);

运行结果:
{name: “newmanman”, number: Array(3)}
{name: “newmanman”, number: Array(3)}

深拷贝:拷贝后的结果不会随着被拷贝元素改变而改变

通过递归拷贝每个元素的值即可

  var obj1 = {
            name: 'manman',
            number: [1, 2, 3]
        }

        function copy(obj1) {
            var obj2 = obj1.constructor === Array ? [] : {};
            for (var key in obj1) {
                if (typeof obj1[key] == 'object') {
                    obj2[key] = copy(obj1[key]);
                } else {
                    obj2[key] = obj1[key];
                }
            }
            return obj2;
        }
        var obj2 = copy(obj1);
        obj1.name = "newmanman"
        console.log(obj1, obj2);

运行结果:
{name: “newmanman”, number: Array(3)}
{name: “manman”, number: Array(3)}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!