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

简述深浅拷贝原理

时间:2018-09-22 18:26:50      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:UNC   属性   数组   function   不可   自己   类型   fun   枚举   

 //数组浅拷贝
         var arr=["xjz","is","a","superman"];

         //slice
         
         var new_arr=arr.slice();

         new_arr[0]="zxb";

         console.log("before:"+arr);

         console.log("after:"+new_arr);
         


         //concat
         

         var new_arr=arr.concat();

         new_arr[0]="bb";


          console.log("before:"+arr);

          console.log("after:"+new_arr);

//这个方法只能是拷贝基本类型 如果数组项是引用类型的话 只会拷贝引用
//所以当以后改变这个引用的时候 都会发生改变 很麻烦
//只是适用于存储基本类型的数组的拷贝

   //深拷贝
           //如果只是简单地数据类型 可以json解析
           //function undefined null NAN Infinity 拷贝不了

          var json=["xjz","super","man",{
                
                "age":12,
                "name":"xjz"

          },function(){return "dadada"},undefined,null,NaN,Infinity];

         
          var newJSON=JSON.parse(JSON.stringify(json));

 

所以还需要自己写一个拷贝  啊哈哈哈哈哈
 

 //for in 不可以获取不可枚举的属性
 //hasOwnProperty 会忽略原型链上的属性
 //Object.getOwnPropertyNames 可以获取可枚举和不可枚举的属性
 //深拷贝

 

function deepCopy(obj){
                  
             if(!(obj && typeof obj==="object")){

                        return;
                 }

               else{

                  var copyResult = obj instanceof Array ?[]:{};

                     for(var key in obj){
                           
                        if(obj.hasOwnProperty(key)){

                           copyResult[key]=typeof obj[key] ==="object"?deepCopy
                           (obj[key]):obj[key];

                         }

                     }

                }

            return copyResult;

        }


      var obj={

          "data":[{"age":12},{"name":"xjz"}, 

           {"adress":"ChangChun"}],

            callBack:function(){
              
              console.log("my love is zxb");

          }

      };

 

简述深浅拷贝原理

标签:UNC   属性   数组   function   不可   自己   类型   fun   枚举   

原文地址:https://www.cnblogs.com/liveoutfun/p/9690435.html

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