简述深浅拷贝原理

 //数组浅拷贝
         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");

          }

      };

 

转载于:https://www.cnblogs.com/liveoutfun/p/9690435.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值