深拷贝与浅拷贝

学习内容:

深拷贝与浅拷贝   针对的都是引用类型
    1.浅拷贝:拷贝基本数据类型的时候,不会受影响
             拷贝引用数据类型的时候,源对象也会被修改
             浅拷贝仅拷贝对象的地址
             白话文:加入b复制了a,当修改a时,b也跟着变化
                a1=[1,2,3]
                a2=a1
                console.log(a1,a2)
                a1.push(4)
                console.log(a1,a2)

    2.深拷贝:是指拷贝一个对象的数据之前,先给拷贝的对象创建一个新的堆地址,这样当拷贝的对象指向的堆中的数据改变时,被拷贝的对象的堆中的数据不会改变
        白话文:a复制了b,当修改a时,b不会改变

    实现深拷贝方法:
    (1)创建新数组,for循环复制
                a1=[1,2,3]
                a2=[]
                for(var i in a1){
                    a2.push(a1[i])
                }
                a1.push(4)
                console.log(a1,a2)//a1--[1,2,3,4]
                                //a2--[1,2,3]

    (2)数组方法slice
                a1=[1,2,3]
                a2=a1.slice(0)
                a1.push(5)
                console.log(a1,a2)

    (3)数组方法concat
                a1=[1,2,3]
                a2=a1.concat()
                a1.push(7)
                console.log(a1,a2)

    (4)Json.parse(JSON.stringify)
                    var test={
                name:"hyw",
                age:23 ,
                friends:["dwz1","dwz2","dwz3"]      
                };
                var test1 = JSON.parse(JSON.stringify(test));//拷贝数组,注意这行的拷贝方法
                test.friends[0]="dwz4"
                
                console.log(test);
                console.log(test1);

        3.手动封装深浅拷贝   true---深拷贝   false---浅拷贝  
                            return返回copy后的对象
                Object.prototype.copyfun=function (a,b){
                if(typeof(a)=="object"){
                    if(b==true){
                        return a2=JSON.parse(JSON.stringify(this))
                    }else{
                        return a3=a
                    }
                }else{
                    return a1=a
                }
                }
                var f1=([1,2,3])
                f2=f1.copyfun(f1,false)
                f1.push(4)
                console.log(f1,f2)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值