深拷贝 vs 浅拷贝

浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。

深拷贝:将 B 对象拷贝到 A 对象中,包括 B 里面的子对象,

浅拷贝:将 B 对象拷贝到 A 对象中,但不包括 B 里面的子对象

1. JSON.parse(JSON.stringify(arr));

这种方法虽然可以实现数组或对象深拷贝,但不能处理函数

let arr = [1, 3, {

    username: ' kobe'

},function(){}];

let arr4 = JSON.parse(JSON.stringify(arr));

arr4[2].username = 'duncan';

console.log(arr, arr4)

2.递归&&判断类型

    function extend(target, source, deep) {

        for (key in source)

            if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {

                if (isPlainObject(source[key]) && !isPlainObject(target[key]))

                    target[key] = {}

                if (isArray(source[key]) && !isArray(target[key]))

                    target[key] = []

                extend(target[key], source[key], deep)        // 执行递归

            }

            else if (source[key] !== undefined) target[key] = source[key]

    }

你可能感兴趣的:(深拷贝 vs 浅拷贝)