由於引用型別(陣列、物件)是按位址傳遞,直接拷貝是淺拷貝,即修改拷貝後的變數,原變數也會改變。有時需要深拷貝乙個物件,這時就需要遍歷徹底複製,使原物件和拷貝物件完全脫離關係。
**:
functiondeepcloneobj(obj);
for(i in
obj)
}return
o; }
實現細節:假定傳入的是乙個引用型別,首先判定傳入的是陣列還是物件,根據判定結果,確定o是初始化為空陣列還是空物件。之後遍歷傳入引用型別的自有屬性,並判定屬性是否為物件,如果是的話做遞迴,否則直接複製給o。
陣列例項:
var arr1 = ["sfsag","akghak","['fafa','gaag','rwet']",125];console.log(arr1);
//["sfsag", "akghak", "['fafa','gaag','rwet']", 125]
var arr2 =deepcloneobj(arr1);
arr1.push("newstr");
console.log(arr1);
//["sfsag", "akghak", "['fafa','gaag','rwet']", 125, "newstr"]
console.log(arr2);//
["sfsag", "akghak", "['fafa','gaag','rwet']", 125]
物件例項:
var obj1 = ,asga:['aff','ghh','wegwer',12],segg:1};console.log(obj1);
//object
var obj2 =deepcloneobj(obj1);
obj1['newstr'] = ['fsg','gsr'];
console.log(obj1);
//object
console.log(obj2);//
object
js 物件深拷貝 深拷貝與淺拷貝
前言 最近在複習一些面試的知識點,剛剛好複習到了這一部分,於是就寫下這篇文章記錄一下。一 值型別和引用型別 在學習深拷貝和淺拷貝之前,我們先來了解一下js的變數型別。值型別 vs 引用型別 值型別 值型別主要有 number,string,boolean,symbol,null,undefined ...
js 物件深拷貝 關於JS深拷貝的學習
看了好多文章講js深拷貝的,但是測試了一下,還有很多地方不完善的,結合別人的 和自己的理解,自己實現了乙個深拷貝。首先要考慮拷貝的目標物件是不是 null,因為 typeof null 結果是 object,如果是null就直接返回null。然後我們再判斷各種包裝物件,因為基本資料型別的包裝物件,n...
js 日期物件深拷貝
常用的深拷貝的方法不適用於日期的深拷貝,對於date 型別,需使用下面的方法。更詳細的物件深拷貝方法請參考 寫的很詳細 因為valueof方法,日期類定義的valueof 方法會返回它的乙個內部表示 1970年1月1日以來的毫秒數.因此我們可以在date的原型上定義轉殖的方法 date.protot...