es6之前

function clone (obj, deep) {
    if (Array.isArray(obj)) {
        if (deep) {
            //深度克隆
            var newArr = [];
            for (var i = 0; i < obj.length; i++) {
                newArr.push(this.clone(obj[i], deep));
            }
            return newArr;
        }
        else {
            return obj.slice(); //复制数组
        }
    }
    else if (typeof obj === "object") {
        var newObj = {};
        for (var prop in obj) {
            if (deep) {
                //深度克隆
                newObj[prop] = this.clone(obj[prop], deep);
            }
            else {
                newObj[prop] = obj[prop];
            }
        }
        return newObj;
    }
    else {
        //函数、原始类型
        return obj; //递归的终止条件
    }
}

es6之后

function objectClone(obj, deep = false) {
    if (obj === null || typeof obj !== 'object') {
        return obj; // 基本类型直接返回
    }

    if (Array.isArray(obj)) {
        return deep 
            ? obj.map(item => objectClone(item, deep)) // 深拷贝数组
            : [...obj]; // 浅拷贝数组(使用展开运算符)
    }

    // 处理普通对象
    const newObj = {};
    for (const [key, value] of Object.entries(obj)) {
        newObj[key] = deep ? objectClone(value, deep) : value; // 递归深拷贝或直接赋值
    }
    return newObj;
}