如何实现浅拷贝和深拷贝

一、浅拷贝的实现方法

1.Object.assign方法
        let obj1={
            name:"aaa",
        }
        let obj2={
            age:20
        }

        let obj3=Object.assign(obj1,obj2)
        // obj3.age=30
        console.log(obj1);
        console.log(obj3);
        console.log(obj1==obj3);
        console.log(obj1===obj3);

结果为:

 2.直接赋值
            let obj1={
                name:"aaa",
                age:20,
                hobby:{
                    life:"eat"
                }
            }
            let obj2=obj1
            obj2.name="hhh"
            console.log(obj1);
            console.log(obj2);
            console.log(obj1==obj2);
            console.log(obj1===obj2);

 二、深拷贝的实现方法

1.递归
let obj1={
                    name:"aaa",
                    age:20,
                    hobby:["1","2","3"]
                }
                function deepClone(obj){
                    if(obj===null ||typeof obj!=="object"){
                        return obj
                    }
                    let obj2
                    if(obj&&typeof obj==="object"){
                        obj2={}
                        for(let key in obj){
                            if(obj.hasOwnProperty(key)){
                                obj2[key]=deepClone(obj[key])
                            }
                        }
                    }
                    if(Array.isArray(obj)){
                        obj2=[]
                        for(let i in obj){
                            obj2.push(deepClone(obj[i]))
                        }
                    }
                    return obj2
                }
                let obj3=deepClone(obj1)
                // obj3.hobby[1]=5
                console.log(obj3);
                console.log(obj1);
                console.log(obj1==obj3);
                console.log(obj1===obj3);

输出结果为:

 2.json
let obj1={
                    name:"aaa",
                    age:20,
                    hobby:["1","2","3"]
                }

                let obj2=JSON.parse(JSON.stringify(obj1))
                obj2.hobby[2]="45"
                console.log(obj2);
                console.log(obj1);
                console.log(obj1==obj2);
                console.log(obj1===obj2);

输出结果为:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值