JS基礎 淺拷貝和深拷貝

2021-09-25 02:33:56 字數 752 閱讀 2495

1.淺拷貝:

將原物件/陣列的引用直接賦給新物件/陣列,新物件/陣列只是引用了原物件/陣列。

原物件/陣列的屬性/元素發生變化新物件/陣列的屬性/元素也發生變化。

let wang = ;

let li = wang;

wang.age = 25;

console.log( li.age) // 25;

2.深拷貝:

建立乙個新的物件/陣列,他拷貝了原物件/陣列的「值」而不是引用。

(適用於新物件/陣列和原物件/陣列之間互相不干擾)

分為兩種:

只深拷貝第一層:

(1)遍歷

let obj = 

let newobj = {};

for(let k in obj )

(2)object.assign

let b = object.assing( {}, a);
(3)展開運算子 …

let b =
完全深拷貝:

json.parse( json.stringify())

方法侷限性:

省略undefined/symbol,

不能序列化函式(不能儲存函式)

不能解決迴圈引用的物件。

解決問題: lodash的深拷貝函式

JS深拷貝和淺拷貝

js中物件分為基本型別和復合 引用 型別,基本型別存放在棧記憶體,復合 引用 型別存放在堆記憶體中 堆記憶體中用於存放由new建立的物件,棧記憶體存放一些基本型別的變數和物件的引用變數 對於簡單變數,記憶體小,直接複製不會發生引用 var a 123 var b a a 123456 console...

JS淺拷貝和深拷貝

1.淺拷貝 copy var obj1 物件存放於堆記憶體中,物件中的鍵值對,值可以為物件,可以為陣列.var obj2 obj1 物件,陣列之間只有引用賦值 obj2.name 撒哈哈 當改動物件obj2的時候,obj1的key對應的value也會更改這是淺拷貝 深拷貝 var obj1 var ...

js深拷貝和淺拷貝

走在前端的大道上 var m var n m n.a 15 這時m.a的值是多少 m.a會輸出15,因為這是淺拷貝,n和m指向的是同乙個堆,物件複製只是複製的物件的引用。深拷貝和上面淺拷貝不同,就是徹底copy乙個物件,而不是copy物件的引用,例如,還是之前的例子,我們這麼寫 var m var ...