陣列的深淺拷貝問題

2021-08-22 08:51:45 字數 667 閱讀 3916

陣列的直接賦值屬於陣列的淺拷貝,js 儲存物件都是存記憶體位址的,所以淺拷貝會導致新陣列和舊陣列共用同一塊記憶體位址,其中乙個陣列變化,另乙個陣列也會相應的變化。

陣列內部不含有引用型別,使用 slice() 、concat() 和 assign() 方法都屬於陣列的深拷貝,乙個陣列變化,另乙個陣列不受影響。

let arr = [1, 2, 3, "hello"];
陣列內部含有引用型別,使用 slice() 、concat() 和 assign() 方法都屬於陣列的淺拷貝,乙個陣列變化,另乙個也會相應的變化。

let arr = [1, 2, 3, , ];
方法一:遞迴

let cloneobj = function

(obj) ;

if (typeof obj !== "object") else

if (window.json) else

} return newobj;

};let newarr = cloneobj(oldarr);

方法二:通過 json 解析解決

let newarr = json.parse(json.stringify(oldarr));

js深淺拷貝的問題

例 1 let a let b a console.log b.num 1 a.num 2 console.log b.num 2 b.num 3 console.log a.num 3可以看出物件間的賦值會相互影響,因為他們是引用型別,所有的值都存在記憶體的乙個區域裡,物件通過指標指向去呼叫,一旦...

C String深淺拷貝問題

1.淺拷貝 淺拷貝 class string 拷貝構造 string const string str 淺拷貝 s1和s2同時會指向同一塊空間。2.深拷貝 傳統寫法 class string 帶預設引數更好 string char str str new char strlen str 1 stri...

深淺拷貝問題 拷貝建構函式

深拷貝 在堆區重新申請空間,進行拷貝操作 淺拷貝 簡單的複製拷貝操作 class person person int age person int m age void test 當引數中有堆區引數,改造之後 class person person int age,int height person...