ES6学习个人笔记——浅拷贝和深拷贝

1.浅拷贝

    <script>
        //浅拷贝的对象,在改变其属性值后,原对象也会发生改变
        var data = {
            id: 1,
            item: '苹果',
            msg:{
                price: 18,
                address: 'cn'
            }
        }
        var obj = {};
        console.log('---------浅拷贝方法1---------');
        for(var k in data){
            // k代表属性名,data[k]代表属性值
            obj[k] = data[k];
        }
        console.log(obj);  //此时修改data的msg内容,obj内容也会发生对应变化
        console.log('---------浅拷贝方法2---------');
        Object.assign(obj,data)  //语法糖
        console.log(obj); //此时修改data的msg内容,obj内容也会发生对应变化
    </script>

 2.深拷贝

    <script>
        // 深拷贝拷贝的对象能够独立于原对象存在,即在内存中新开辟了地址空间
        var data = {
            id: 1,
            item: '苹果',
            msg:{
                price: 18,
                address: 'cn'
            },
            color:['red','green','yellow']
        }
        function deepCopy(newObject,oldObject){
            for(var k in oldObject){
            //获得oldObject的属性值
            var value = oldObject[k];
            //判断value的属性类型,如果是对象和数组就递归拷贝,如果是简单数据类型就直接浅拷贝
            //1.判断value是否是数组
            if(value instanceof Array){
            newObject[k] =[];
            deepCopy(newObject[k],value);
            }
            else if(value instanceof Object){
            //2.判断value是否是对象
            newObject[k] ={};
            deepCopy(newObject[k],value);
            }else{ 
            //3.拷贝简单数据类型
                newObject[k] = value;
            }   
            }      
        }
        var o = {}
        deepCopy(o,data);
        console.log(o);
    </script>

 参考视频:2019全新javaScript进阶面向对象ES6_哔哩哔哩_bilibili 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值