js淺拷貝與深拷貝詳解

2021-10-10 05:11:08 字數 1499 閱讀 1231

淺拷貝與深拷貝

如果b複製了a,改變a,b也跟著變了這就是淺拷貝,如果b沒有變就是深拷貝。

舉個例子:

這裡就要引入基本資料型別和引用資料型別的概念了,

基本資料型別有:number、string、boolean、null、undefined、symbol。

引用資料型別:object、array、以及函式等。

基本型別拷貝

let a=1;儲存在棧記憶體中;這裡引用他人的更好的理解在棧內儲存。

當你b=a複製時,棧記憶體會開闢乙個新的記憶體,例如

所以你修改a時不會對b造成影響。

引用資料型別

引用資料型別名字存在棧記憶體,但是值存在堆記憶體中,棧記憶體會提供乙個位址指向堆記憶體。

所以當b拷貝a時,複製的其實是a的引用位址,而不是裡面的值。

實現深拷貝

js深拷貝與淺拷貝

1 基礎知識 基本型別與引用型別 js中可以把變數分成兩部分,基本型別和引用型別。基本型別包括 undefined null boolean number和string 引用型別值可能由多個值構成的物件。在對基礎型別資料進行拷貝時,實際相當於建立新的相同資料 hello 賦值給b var a hel...

js 淺拷貝與深拷貝

js 有兩種資料型別,基礎資料型別和引用資料型別 基礎資料型別都是按值訪問的,我們可以直接操作儲存在變數中的實際的值。而引用型別如array,1.淺拷貝 只複製指向某個物件的指標,而不複製物件本身,新舊物件共享一塊記憶體 淺拷貝是指只複製一層物件,當物件的屬性是引用型別時,實質複製的是其引用,當引用...

js深拷貝與淺拷貝

實現乙個頁面或者乙個功能時,常常遇到的場景需要我們備份乙個陣列或者物件,這時候出現了深拷貝與淺拷貝效果截然不同呀總結如下 var arr 1,2,3,4 shallowarr arr arr 0 change console.log arr console.log shallowarr change...