封装深拷贝方法

92 阅读1分钟

本方法只适用于大部分情况下,没有考虑symbol,set,map,函数柯里化等。

function deepClone(obj = {}) {
    // 判断传入的 obj 是不是数组或对象,不是直接返回 obj
    if (typeof obj !== 'object' || obj == null) {
        return obj;
    }
    let result;
    // 判断是不是数组
    if (obj instanceof Array) {
        result = [];
    } else {
        result = {};
    }
    for (let key in obj) {
        // hasOwnProperty()方法:检测一个属性是否是对象的自有属性
        if (obj.hasOwnProperty(key)) {
            // 递归调用
            result[key] = deepClone(obj[key]);
        }
    }
    return result;
}

个人项目中使用,勿喷