js递归实现深拷贝

//使用递归的方式实现数组、对象的深拷贝
export function deepClone(obj) {
    //判断传入的值是否为一个对象
    if (obj === null || typeof obj !== 'object') {
        return obj;
    }
    if (
        Object.prototype.toString.call(obj) ===
        '[object Date]'
    ) {
        return new Date(obj);
    }
    if (
        Object.prototype.toString.call(obj) ===
        '[object RegExp]'
    ) {
        return new RegExp(obj);
    }
    if (
        Object.prototype.toString.call(obj) ===
        '[object Undefined]'
    ) {
        return new Error(obj);
    }
    let objClone = Array.isArray(obj) ? [] : {};
    if (obj && typeof obj === 'object') {
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                //判断ojb子元素是否为对象,如果是,递归复制
                if (
                    obj[key] &&
                    typeof obj[key] === 'object'
                ) {
                    objClone[key] = deepClone(
                        obj[key],
                    );
                } else {
                    //如果不是,简单复制
                    objClone[key] = obj[key];
                }
            }
        }
    }
    return objClone;
}

你可能感兴趣的:(js递归实现深拷贝)