深浅拷贝方式

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

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/】

原文地址:https://www.cnblogs.com/wuhairui/p/14693597.html