js深拷贝与浅拷贝整理

本文探讨了JavaScript中的浅拷贝和深拷贝概念。浅拷贝仅复制原始类型的值,而深拷贝则针对引用类型的对象。通过Object.assign和扩展运算符可以实现浅拷贝,而深拷贝可以通过JSON.parse(JSON.stringify(object))实现,但这种方法存在局限性,如忽略undefined、symbol,无法序列化函数以及无法处理循环引用的对象。最后,文章提到了一种最佳的深拷贝函数实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值