• 深拷贝和浅拷贝


    深拷贝

            // 深拷贝拷贝多层, 每一级别的数据都会拷贝.
            var obj = {
                id: 1,
                name: 'andy',
                msg: {
                    age: 18
                },
                color: ['pink', 'red']
            };
            var o = {};
            // 封装函数 
            function deepCopy(newobj, oldobj) {
                for (var k in oldobj) {
                    // 判断我们的属性值属于那种数据类型
                    // 1. 获取属性值  oldobj[k]
                    var item = oldobj[k];
                    // 2. 判断这个值是否是数组
                    // 数组也属于对象Object,必须先判断是否是数组
                    if (item instanceof Array) {
                        newobj[k] = [];
                        deepCopy(newobj[k], item)
                    } else if (item instanceof Object) {
                        // 3. 判断这个值是否是对象
                        newobj[k] = {};
                        deepCopy(newobj[k], item)
                    } else {
                        // 4. 属于简单数据类型
                        newobj[k] = item;
                    }
    
                }
            }
            deepCopy(o, obj);
            console.log(o);
    
            var arr = [];
            console.log(arr instanceof Object); // 数组属于对象
            // 修改原来的对象,对拷贝的对象不会有影响
            o.msg.age = 20;
            console.log(obj);

     浅拷贝

            // 浅拷贝只是拷贝一层, 更深层次对象级别的只拷贝引用.
            // 深拷贝拷贝多层, 每一级别的数据都会拷贝.
            var obj = {
                id: 1,
                name: 'andy',
                msg: {
                    age: 18
                }
            };
            var o = {};
            // for (var k in obj) {
            //     // k 是属性名   obj[k] 属性值
            //     o[k] = obj[k];
            // }
            // console.log(o);
            // o.msg.age = 20;
            // console.log(obj);
    
            console.log('--------------');
            Object.assign(o, obj); // 实现浅拷贝
            console.log(o);
            o.msg.age = 20; // 对原数据修改之后,拷贝的也会发生变化
            console.log(obj);
    // es6 新增方法实现浅拷贝
    Object.assign(o, obj);
  • 相关阅读:
    使用powerdesigner导入sql脚本,生成物理模型
    深入理解[代理模式]原理与技术
    8、Dockerfile介绍和最佳实践
    7、Docker监控方案(cAdvisor+InfluxDB+Grafana)
    6、Docker图形化管理(Portainer)
    5、Docker网络配置(单机)
    4、Docker数据管理
    html二
    html
    IO多路复用,协程,
  • 原文地址:https://www.cnblogs.com/ccv2/p/13192361.html
Copyright © 2020-2023  润新知