码迷,mamicode.com
首页 > 其他好文 > 详细

浅拷贝和深拷贝的一些理解

时间:2020-07-08 23:10:08      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:name   地址   info   OLE   多层   ima   ssi   epc   item   

<script>
        /*
            1,浅拷贝只拷贝一层,更深层次对象级别的只拷贝引用
            2,深拷贝拷贝多层,每一级别的数据都会拷贝 
         */
         var obj = {
             id:1,
             name:‘andy‘,
             msg: {
                 age:18
             },
             color:[‘pink‘,‘red‘]
         }
         //此处为浅拷贝  只能拷贝最外一层 对于深层次的对象只是共享了地址
         var o = {}
        //  for(var k in obj){
        //      //k 属性名,obj[k] 属性值
        //      o[k] = obj[k]
        //  }

        //es6语法浅拷贝
        // Object.assign(o,obj)
        //  console.log(o);
         

         //深拷贝  对于深层次对象重新开辟空间,不是单纯的共享一个对象
            function deepCopy(newobj,oldobj){
                for(var k in oldobj){
                    //判断数据类型为哪种数据类型
                    var item = oldobj[k];
                    //是否为数组   数组最先判断,因为数组也是对象,先写object会覆盖对数组的判断
                    if(item instanceof Array){
                        newobj[k] = []
                        deepCopy(newobj[k],item)
                    //是否为对象
                    }else if(item instanceof Object){
                        newobj[k] = {}
                        deepCopy(newobj[k],item)
                    //简单数据类型
                    }else{
                        newobj[k] = item
                    }
                }
            }
            deepCopy(o, obj)
            console.log(o);
技术图片

浅拷贝和深拷贝的一些理解

标签:name   地址   info   OLE   多层   ima   ssi   epc   item   

原文地址:https://www.cnblogs.com/xu3241/p/13269602.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!