js深拷贝与浅拷贝整理

浅拷贝:对原始类型进行拷贝
深拷贝:对引用类型(对象类型)进行拷贝

1.如何进行浅拷贝
Object.assign和扩展运算符(…) 实现的是浅拷贝
2.如何进行深拷贝
JSON.parse(JSON.stringify(object))
json.parse实现深拷贝的局限性
1. 会忽略 undefined
2 会忽略 symbol
3 不能序列化函数
4 不能解决循环引用的对象
3.最佳深拷贝函数

// 最佳深拷贝函数
        function deepClone(obj) {
            if (!isObject(obj)) {
                throw Error('不是对象')
            }
            const newObj = Array.isArray(obj) ? [...obj] : { ...obj }
            // Reflect.ownKeys 跟 Object.keys作用一样,但是Reflect.ownKeys可以获取不可枚举的属性
            Reflect.ownKeys(newObj).forEach(key => {
                newObj[key] = isObject(newObj[key]) ? deepClone(newObj[key]) : newObj[key]

            })
            return newObj
        }
        let zhangsan = {
            age: undefined,
            sex: Symbol('male'),
            jobs: function () { },
            name: 'fecast'
        }
        let zx = deepClone(zhangsan)
        console.log(zx)

你可能感兴趣的:(js)