javascript 深度克隆物件

龍恩0707發表於2013-08-27

js一般有兩種不同資料型別的值:

基本型別(包括undefined,Null,boolean,String,Number),按值傳遞;

引用型別(包括陣列,物件),按址傳遞,引用型別在值傳遞的時候是記憶體中的地址。例如:

 

  如果你修改b的值,那麼a變數的值也發生了變化。

  克隆或者拷貝分為2種:淺度克隆(拷貝),深度克隆(拷貝);

  淺度克隆:基本型別為值傳遞,物件仍為引用傳遞。

  深度克隆:所有元素或屬性均完全克隆,並於原引用型別完全獨立,即,在後面修改物件的屬性的時候,原物件不會被修改。

 我的程式碼如下: 主要用了遞迴。

     function cloneObject(obj){
          if(obj === null){
              return null;
          }else if(obj instanceof Array){
             var arr = [];
             for(var i = 0, ilen = obj.length; i < ilen; i+=1){
                 arr[i] = obj[i];
             }
             return arr;
        }else if(obj instanceof Date || obj instanceof RegExp || obj instanceof Function){
             return obj;
        }else if(obj instanceof Object){
            var o = {};
            for(var i in obj){
                if(obj.hasOwnProperty(i)){
                    o[i] = cloneObject(obj[i]);
                 }
            }
            return o;
       }else{
           return obj;
       }
  }

 

 

相關文章