zoukankan      html  css  js  c++  java
  • 浅拷贝和深拷贝的一些理解

    <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);
  • 相关阅读:
    学习新东西 方法
    转 Dock 外 命令解析
    转 Dockerfile 常用指令
    RPC应用的java实现(转)
    link with editor
    org.xml.sax.SAXParseException: prolog 中不允许有内容
    webservice
    logging.xml file setfile(null,true) call failed
    log4j配置 logging.xml (转载)
    tomcat server.xml docbase workdir
  • 原文地址:https://www.cnblogs.com/xu3241/p/13269602.html
Copyright © 2011-2022 走看看