JS 淺拷貝與深拷貝

2021-10-01 08:28:40 字數 863 閱讀 4312

首先,對於簡單的變數,記憶體小,我們直接複製不會發生引用,

也就不會有淺拷貝與深拷貝的分別

對乙個物件

logo:

,"left"

:"50"

,"logosizereference"

:"width"

,"top"

:"50"

,"size"

:"50"

}

以下三種拷貝方式

當使用直接賦值進行拷貝時,其實複製的是引用位址,而並非堆裡面的值

這種方式即引用,更改其中的任何乙個物件,其他的也會跟著改變。

這種方式開始我也以為是深拷貝

然而對業務需求而言 還是不夠ok

用了兩天我發現"aspectratio"這裡還是關聯!

這種拷貝方式如果沒有紅線框內的屬性,或許也可以稱作深拷貝

因為這個屬性是乙個物件,用這種方式也只能複製其引用位址。

附 object.assign() 介紹

(1) 用於將所有可列舉屬性的值從乙個或多個源物件複製到目標物件,需要兩個物件作為引數,第乙個引數是目標物件,後面的引數都是源物件。返回值為目標物件。

(2) 可以用於合併物件、轉殖物件以及更改屬性的值(參考object.assign方法的使用 )

借用json物件的parse和stringify後真正實現了深拷貝,所有資料都互不影響。

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