手写拷贝,用递归方式实现

37 阅读1分钟

封装一个函数,判断参数是数组还是object

var arr = [11, 22, 33]
    var obj = {};
    var date = new Date()

function checkType(o) {
        var arr = Object.prototype.toString.call(o).split(" ");
        var str = arr[1];
        return str.slice(0, str.length - 1);
    }

在封装一个递归函数,实现深拷贝

function cloneDeep(params) {
        //1.先判断是数组还是对象,再创建新的数组or对象
        var temp = Array.isArray(params) ? [] : {};
        for (let key in params) {
            if (typeof params[key] == "object") {
                temp[key] = cloneDeep(params[key])
            } else {
                temp[key] = params[key]
            }
        }
        return temp;
    }
    
var obj = { name: "刘德华", list: [11, 22, 33], show() { } }
    var obj1 = cloneDeep(obj);
    obj.name = "吴彦祖"
    obj.list[0] = "陈冠希"