天天看点

JavaScript——浅拷贝和深拷贝

浅拷贝:拷贝后的结果会随着被拷贝元素改变而改变(类似于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)}

继续阅读