Js學習之 深拷貝與淺拷貝

2022-07-09 07:12:11 字數 943 閱讀 4908

1、深拷貝和淺拷貝的區別:

假設有陣列物件 a=[1,2,3] 

我們需要知道的前提是:物件的指標實體是存在不同的地方的,所以:

如果是把它賦值b = a,那就是淺拷貝,相當於多了乙個指向[1,2,3]指標b

此時不管用指標a去改變實體的內容,還是指標b去改變實體的內容,都是一樣的,例如:你改變了b[0],而a[0]也是輸出一樣的內容

深拷貝就是不僅要申請變數存新的指標,還要申請新的記憶體用來存和原物件一樣的實體!

2、陣列深拷貝

方法一:concat()

方法二:展開運算子——[...]

實驗如下:

3、物件深拷貝

方法一:object.assign({},obj)

方法二:展開運算子——

實驗如下:

4、手寫深拷貝?

function deepcopy(obj = {}) 

let result; //初始化返回結果

if (obj instanceof array) else ;

}for (let key in obj)

}return result; //返回結果

}

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...