JS實現深拷貝

2022-09-24 05:18:10 字數 828 閱讀 6062

我們知道,js中的=運算子實現的只是淺拷貝,預設的各種方法只是實現了第一層深拷貝,再深層也是淺拷貝。

所以實現深拷貝的方法,就是進行遞迴,然後拷貝。

首先,實現乙個淺拷貝:

function

cloneshallow(source) ;

for (var key in

source)

}return

target;}//

測試用例

var a =,

a1: undefined,

a2:

null

, a3: 123}

var b =cloneshallow(a);

a.name = "前端高階";

a.book.price = "55";

console.log(b);//,

//a1: undefined,

//a2: null,

//a3: 123

//}

深拷貝和淺拷貝的實現區別,就是深拷貝進行了遞迴:

function

clonedeep1(source) ;

for(var key in

source) else}}

return

target;}//

使用上面測試用例測試一下

var b =clonedeep1(a);

console.log(b);

//,

//a1: undefined,

//a2: {},

//a3: 123

//}

js實現深拷貝

深拷貝 深拷貝本身只針對較為複雜的object型別資料,但是含義的話比如基本資料型別a和b的賦值操作,賦值之後b有自己的記憶體空間,a,b之間互不影響 淺拷貝 引用資料型別 名存在棧記憶體中,值存在於堆記憶體中,但是棧記憶體會提供乙個引用的位址指向堆記憶體中的值。當b a進行拷貝時,其實複製的是a的...

JS 深拷貝實現

web平台上一直在刻意的避開深拷貝,一直使用json.parse json.stringify object 避開深拷貝的問題。知道今天碰見個bug,json將function轉化為了字串,排到這個bug時,憔悴 若是node.js平台的話,一直現成的輪子等著挑,可惜是web,不太敢亂引入,手寫乙個...

js實現深拷貝

var obj var newobj obj console.log newobj obj.number 2 console.log obj console.log newobj 發現此時newobj的number也變成了2,很顯然這不是我們想要的結果。往往我們開發專案中會大量用到賦值,卻發現之前原...