前端拷贝

前端拷贝

  1. 类型

    • 浅拷贝: 只拷贝一层的拷贝方式,地址拷贝
    • 深拷贝: 值的完全拷贝
  2. 浅拷贝实现

    • 解构赋值
    • Object.assign
    • 引用类型直接赋值
  3. 深拷贝实现

    • JSON.parse / JSON.string [ 序列化 / 反序列化 ]
    • 递归实现深拷贝 - 要求: 手写出来
      //对象深拷贝
        function deepClone(origin,target){
            //target是否存在如果不存在创建空对象
            let tar = target || {},
            //判断是否为引用数据类型
                toStr = Object.prototype.toString,
                arrType='[object Array]';
    
            for(let key in origin){
                //剥离原型链的数据
                if(origin.hasOwnProperty(key)){
                    //判断是否为引用数据类型 对象或数组
                    if(typeof(origin[key]) === 'object' && origin[key] !== null){
                        if(toStr.call(origin[key]) === arrType ){
                            tar[key] = [];
                        }else{
                            tar[key] = {};
                        }
                        deepClone(origin[key],tar[key]);
                    }else{
                        tar[key] = origin[key];
                    }
                }
            }
            return tar;
        }
    
    • 第三方
      • loadsh
        • _.cloneDeep()
      • Immutable.js 【 性能最好的 】

posted on 2019-12-03 10:15  是夏目呀  阅读(186)  评论(0)    收藏  举报

导航