陣列深拷貝 淺拷貝與深拷貝(個人理解)

2021-10-14 21:56:09 字數 1336 閱讀 8955

深拷貝和淺拷貝的區別
1、淺拷貝只複製一層物件的屬性、值引用 (場景:對於只有一層結構的array和object想要拷貝乙個副本時使用)

淺拷貝的實現方式
1、es6 的 object.assign()  //當object只有一層時是深拷貝

var obj = };

var initobj = object.assign({},obj)

initobj.a.a = 'kuli';

console.log(obj.a.a)//kuli

2、array.prototype.cancat() //concat的方法是不修改原陣列,只會返回乙個淺複製原陣列中的新陣列

let arr = [1,3]

let arr2 = arr.concat();

arr2[2].username = 'kuli';

console.log(arr) //kuli

3、es6中的物件擴充套件

let list = [0,1,2,3,4]

let newlist = ;

4、array.prototype.slice() //slice的方法是不修改原陣列,只會返回乙個淺複製原陣列中的新陣列

let arr = [1,3,]

let arr2 = arr.slice()

arr[2].username = 'kuli'

console.log(arr) //kuli

深拷貝的實現的方式
1、es6 的 object.assign()  //當下為一層(深拷貝)

let obj =

let obj2 = object.assign({},obj)

obj2.username = 'kuli'

console.log(obj) //kobe

2、json.stringify 和 json.parse //並不能拷貝函式

json.parse(json.stringify(obj));

3、遞迴實現

deepclone(obj);

if(obj && typeof obj==="object")else}}

} return objclone;

}4、什麼jq的extend方法(咱也沒用過,咱也不知道)

陣列拷貝(深拷貝 淺拷貝)

底層都是使用system.arraycopy object src,int srcpos,object dest,int destpos,int length 方法完成陣列元素拷貝任務的 方法說明 如果newlength original.length,那麼會將原陣列中前newlength個元素拷貝...

「淺拷貝」與「深拷貝」

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...

淺拷貝與深拷貝

淺拷貝 1 2 myclass a,b a b 為了封裝性和解耦,同型別的兩個物件之間進行賦值操作時,所有成員變數被複製,包括私有成員 指標變數。類的成員函式在傳遞或返回物件時都會進行物件複製產生臨時物件,比如函式呼叫時實參變為形參,以及函式返回物件。考慮到效能和使用者要求不同,編譯器不複製物件內部...