今天的码农女孩做了关于深拷贝和浅拷贝的笔记 2022/1/10

对象的复制:
深拷贝和浅拷贝:
浅拷贝:在引用变量赋值给另一个变量时,引用的是一个堆内存地址,当一个变量改变时,另一个变量跟着改变
深拷贝:在引用变量赋值给另一个变量时,开辟了一个新堆内存地址,当一个变量改变时,另一个变量不改变
1.自己遍历,实现深拷贝
例:
        var x=[1,2,3];
        var y=[];
        for(var i=0;i<x.length;i++){
            y.push(x[i]);
        }
        x[0]=66;
        console.log(x);//[66,2,3]
        console.log(y);//[1,2,3]
例:
        var obj={age:23,name:"zhang"}
        var o={}
        for(var v in obj){
            o[v]=obj[v]
        }
        obj.name="li";
        console.log(obj);//{age: 23, name: 'li'}
        console.log(o);//{age: 23, name: 'zhang'}
2.借助数组的函数,凡是可以返回新数组的函数,都可以执行复制
例如:
        var x=[1,2,3];
        var y=x.concat();
        x[0]=66;
        console.log(x);//[66,2,3]
        console.log(y);//[1,2,3]
3.借助Object对象下的方法
        var obj={age:23,name:"zhang"}
        var o=Object.assign(obj);//复制对象,实现浅拷贝
        obj.name="li";
        console.log(obj);//{age: 23, name: 'li'}
        console.log(o);//{age: 23, name: 'li'}

        var obj={age:23,name:"zhang"}
        var o=Object.create(obj);//创建对象,实现深拷贝
        o.name="wang";
        obj.name="li";
        console.log(obj);//{age: 23, name: 'li'}
        console.log(o);//{name:'wang'}
4.ES6下的扩展运算符(...)
        var x=[11,22,33];
        // console.log(x[0],x[1],x[2])//11 22 33
        // console.log(...x);//11 22 33
        var y=[...x];
        x[0]=66;
        console.log(x);//[66,22,33]
        console.log(y);//[11,22,33]
5.Json数据格式
JSON.parse()//json转成对象
JSON.stringify()//对象转json
缺点:对象的属性如果是symbol类型是无法复制的
        var obj={name:"li",color:["red","blue"],y:{a:1,b:2}};
        var json=JSON.stringify(obj);
        var o=JSON.parse(json);
        obj.name="wang";
        console.log(obj);//{name wang}
        console.log(o);//{name li}
o和obj是深拷贝


 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值