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

    一.浅拷贝

    
    
    //浅拷贝
            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);
  • 相关阅读:
    017-新闻表分页增删改查
    016-页面生命周期
    015-用户登录注册
    014-Session服务器状态保持
    013-Cookie状态保持
    012-ViewState状态保持
    011-Server服务器对象属性
    010-判断是否回传IsPostBack属性
    Github使用教程
    获取中文时间
  • 原文地址:https://www.cnblogs.com/crazy-rock/p/13298952.html
Copyright © 2011-2022 走看看