浅拷贝与深拷贝

一.浅拷贝


//浅拷贝
        var obj = {
            id: 20,
            name: 'Tom',
            age: 18,
            msg: {
                sex: '男'
            }
        };
        var newObj = {};
        //方法一:利用for in循环进行浅拷贝
        // for (var k in obj) {
        //     newObj[k] = obj[k]
        // }
        //console.log(newObj);
        //方法二:利用es6的新方法
        Object.assign(newObj, obj);
        console.log(newObj);
注意:由于是浅拷贝,所以对于msg方法而言,此时只是拷贝了其地址,如果修改了其信息,两者都会发生变化;简单点来说,就是假设B复制了A,当修改A时,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。

二.深拷贝

var obj = {
            id: 20,
            name: 'Tom',
            age: 18,
            msg: {
                sex: '男'
            },
            color: ['pink', 'red']
        };
        var o = {};
 //封装函数
        function deepCopy(newObj, oldObj) {
            for (var k in oldObj) {
                //判断属性值为哪种数据类型/获取属性值
                var item = oldObj[k];
                //判断这个属性值是否为数组
                if (item instanceof Array) {
                    newObj[k] = [];
                    deepCopy(newObj[k], item)

                } else if (item instanceof Object) {
                    //判断这个属性值是否为对象
                    newObj[k] = {};
                    deepCopy(newObj[k], item)
                } else {
                    //属于简单数据类型
                    newObj[k] = item;
                }
            }
        };
        deepCopy(o, obj);
        console.log(o);

 

posted @ 2020-07-14 14:34  流弊的小涛  阅读(108)  评论(0编辑  收藏  举报