• 深浅拷贝方式


    浅拷贝方式(对象只有一层属性就是深拷贝,多层的就是浅拷贝):

    es6的 {...obj}
    和Object.assign(obj)

    深拷贝方式(所以层都进行拷贝):

    一般方式:

    jquery库 $.extend(true,[],obj)
    lodash库 _.cloneDeep(obj)
    JSON.parse(JSON.stringify(obj))

    递归方式:

    原理:传入对象 判断是对象还是数组 创建x[]或{} 遍历对象 hasOwnProperty存在某个属性 赋值空对象=递归这个方法 有下一层对象 递归调用 不存在下一次 return x

    //递归实现深拷贝
    function deepClone(obj) {
        //判断是对象函数数组 创建空对象/数组
        var objClone = Array.isArray(obj) ? [] : {};
        //引用类型
        if(obj && typeof obj === 'object') {
            //遍历对象 存在这个属性 赋值空对象 = 递归这个方法 
            for(key in obj) {
                if(obj.hasOwnProperty(key)) {
                    if(obj[key] && typeof obj[key] === "object") {//有下一层对象
                        objClone[key] = deepClone(obj[key])
                    } else { //没有下一层
                        objClone[key] = obj[key];
                    }
                }
            }
        }
        return objClone;
    }

     深拷贝数组(从0 开始拷贝):

    arr.slice(0)

    欢迎一起交流!
    【http://wuhairui.cnblogs.com/】

  • 相关阅读:
    webpack-bundle-analyzer使用
    HTTP1.0,HTTP1.1和HTTP2.0区别
    document.readyState
    async和defer
    页面生命周期
    key的理解
    解释型语言和编译型语言
    AMD/CMD/CommonJS与ES6 Module的区别
    vue的keep-alive原理
    数字钱包metaplex-foundation
  • 原文地址:https://www.cnblogs.com/wuhairui/p/14693597.html
Copyright © 2020-2023  润新知