簡述深淺拷貝原理

 //數組淺拷貝
         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 能夠獲取可枚舉和不可枚舉的屬性
 //深拷貝json

 

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");

          }

      };
相關文章
相關標籤/搜索