• 浅拷贝与深拷贝


    一.浅拷贝

    
    
    //浅拷贝
            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);
  • 相关阅读:
    clearfix 清除浮动的问题
    python第四十五课——继承性之多继承
    Linux基础第六课——grep|awk|sort|uniq
    Linux基础第五课——用户管理
    Linux基础第四课——文件操作
    Linux第三课——目录操作
    Linux基础第二课——系统架构
    Linux基础第一课——基础知识了解
    01 http协议概念及工作流程
    18- php Redis扩展编译
  • 原文地址:https://www.cnblogs.com/crazy-rock/p/13298952.html
Copyright © 2020-2023  润新知