js中的简单浅拷贝与深拷贝

41 阅读1分钟
    // 浅拷贝对象
        ...展开运算符,
        Object.assign(),
    // 当object只有一层的时候,是深拷贝;所以当原数据进行浅拷贝
    
    // 浅拷贝数组
        Array.prototype.concat()
        Array.prototype.slice()
    // 当Array只有一层的时候,是深拷贝;所以当原数据进行浅拷贝,改变arr2的arr[1],而原数据arr1中的arr1[1]没有改变;


    // // 深拷贝
        JSON.parse(JSON.stringify())//Object和Array可以通过JSON.parse(JSON.stringify())实现深拷贝,但是function,undefined会报错、symbol 会丢失

    // jQuery.extend(true,a,b),a使用b的属性


    // 手写递归
    // 获取数据的类型

    function deepClone(target) {
        const currentType = (target) => {
            return Object.prototype.toString.call(target).slice(8, -1)
        }
        let result;
        switch (currentType(target)) {
            case 'Object': result = {}; break
            case 'Array': result = []; break
            default: return target;
        }
        for (let key in target) {
            if (currentType(target[key]) === 'Object' || currentType(target[key]) === 'Array') result[key] = deepClone(target[key])
            else result[key] = target[key]
        }
        return result
    }