js 深拷貝 淺拷貝

2022-08-13 00:24:23 字數 891 閱讀 3454

1.基本型別(棧資料)

string、number、boolean、undefined、null

2.引用型別(堆資料)

object(常用的包括function、array、date、regexp等)

ps:堆和棧的區別

值型別是存在棧裡的,訪問速度都很快。

棧的特點:

先進後出,類似羽毛球桶,先放進去的羽毛球,要想拿出來,必須先把後放進去的羽毛球拿出來。

引用型別的真實資料存在堆裡。

,真實資料其實存在堆裡,如果想要獲取真實的資料,就要通過引用位址去堆裡找。

深拷貝和淺拷貝都只針對引用資料型別,淺拷貝會對物件逐個成員依次拷貝,但只複製記憶體位址,而不複製物件本身,新舊物件成員還是共享同一記憶體;深拷貝會另外建立乙個一模一樣的物件,新物件跟原物件不共享記憶體,修改新物件不會改到原物件。

區別:淺拷貝只複製物件的第一層屬性,而深拷貝會對物件的屬性進行遞迴複製。

1.淺拷貝

淺拷貝的方法:object.assign()、slice、concat、es6的...擴充套件符均為淺拷貝

2.深拷貝

深拷貝的方法:

(1)json.parse(json.stringify(obj)),缺點是無法對function進行操作

原理:用json.stringify()將物件轉成字串,再用json.parse()把字串解析成物件。(會在堆記憶體開闢乙個新的空間存放這個物件)

(2)遍歷物件對子項賦值來進行深拷貝(一定要考慮到物件中有引用物件的情況)

js淺拷貝深拷貝

js淺拷貝深拷貝 對於想要複製的物件,如果物件裡面對應的值都是基本資料型別的,可以直接複製 也就是通過淺拷貝複製。如果對應的值有物件那麼淺拷貝是行不通的。會造成資料汙染。下面介紹淺拷貝與深拷貝實現方法。1.淺拷貝 let tem let copy for let key in tem 2.通過obj...

淺拷貝,深拷貝 js

堆和棧 基本型別 存放在棧中的簡單資料段,資料大小確定,記憶體空間大小可以分配。6種基本資料型別 undefined null boolean number和string,es6新增屬性symbol.他們是直接按值存放的,所以可以直接訪問。引用型別 存放在堆記憶體中的物件,變數實際儲存的是乙個指標,...

JS淺拷貝 深拷貝

1,前景提要 1 數字在被複製後,再修改時,不會改變原值 var a 5 var b a b 7 console.log a a不變 2 物件在被複製後,再修改時,會改變原值 var a var b a b.name hi console.log a a.name hi 2,淺拷貝 拷貝一層物件。深...