zoukankan      html  css  js  c++  java
  • 深拷贝和浅拷贝

    深拷贝

            // 深拷贝拷贝多层, 每一级别的数据都会拷贝.
            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);
  • 相关阅读:
    C#基础第五天
    基础学习14天 MD5加密
    C#基础第二天
    C#基础学习第一天
    Privacy Policy of ColorfulBroswer
    asp.net mvc 上传图片 摘自mvc 高级编程第311页
    多彩浏览器win10版 隐私声明
    uwp获取版本信息win10 VersionInfo
    uwp ,win10 post json
    windows phone 8.0 app 移植到windows10 app 页面类
  • 原文地址:https://www.cnblogs.com/ccv2/p/13192361.html
Copyright © 2011-2022 走看看