對象的深度克隆

首先了解js的數(shù)據(jù)類型。可以分為原始數(shù)據(jù)類型和對象類型數(shù)據(jù)。

原始數(shù)據(jù)類型指的是number、string、boolean。。
對象類型數(shù)據(jù)指的是array、object以及function。。

原始類型存儲的是數(shù)據(jù)本身。
對象類型存儲的是對象的引用地址。

先來看一個例子。

var a = [1,2,3];
var b = a;
a.push(5);
console.log(b);

輸出的是:[1,2,3,5]

因為a是一個數(shù)組對象。把a賦給b,其實是把a的引用地址復(fù)制給了b。所以a和b的引用地址是一樣的,操作任何一個都會影響。

正確寫法:

var a = {a:1,b:2,c:[1,2,3]};

function deepclone(obj){

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

    for(var i in obj){

        if(typeof(obj[i]) == "object"){

            o[i] = deepclone(obj[i]);

        }else{

            o[i] = obj[i];
        }

        /*可以簡化為:
      o[i] =  typeof(obj[i]) == "object" ? deepclone(obj[i]): obj[i];  */
     
       }
      return o;
}

var b = deepclone(a);
console.log(b);

對象類型Array的判斷方法:instanceof

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容