ES6 Day10 深拷貝與淺拷貝

2021-10-07 13:45:14 字數 2081 閱讀 6442

接上篇:[es6]day09—函式的定義和呼叫、this、閉包、遞迴

10.1.1 淺拷貝

淺拷貝的含義

淺拷貝只是拷貝一層,更深層次物件級別的只拷貝引用(記憶體位址)。

('o拷貝後',o

)//假如修改o

.msg

.age

,obj

.msg

.age

也會改變

,說明o拷貝的只是obj

.msg

.age

的位址,

屬於淺拷貝o.

msg.

age=20;

console

.log

('修改拷貝後的o',o

)console

.log

('修改拷貝後o,原obj'

淺拷貝的實現

1、 利用es6 淺拷貝object.assign語法糖

object.assign(target,source,source,...)

object

.assign(o

,obj

)

參考:ecmascript 6 入門~object-assign

10.1.2 深拷貝

深拷貝的含義

深拷貝會拷貝多層,每一級別的資料都會拷貝,拷貝物件不是只拷貝引用,而是複製原記憶體空間中的資料給新物件,為其開闢乙個新的記憶體空間,對新物件屬性進行修改時,原物件不受干擾。

深拷貝的實現

1、遞迴方式實現深拷貝

function

deepclone

(obj)if

(obj&&

typeof

obj===

'object'

)else}}

}return

objclone

}

會忽略值為function以及undefied的字段,而且對date型別的支援也不太友好。

2、通過 json 物件實現深拷貝

//通過js的內建物件json

來進行陣列物件的深拷貝

function

deepclone

(obj

)

其他參考:

ES6 淺拷貝和深拷貝

1.深拷貝 是指修改拷貝的新變數不會改變原有變數的值,新變數與原有變數指向不同的記憶體位址 基本資料型別一般是深拷貝,修改b的值不會影響a let a 1 let b a b 2 console.log a,b 1 22.淺拷貝 是指修改拷貝的新變數會改變原有變數的值,新變數與原有變數指向相同的記憶...

「淺拷貝」與「深拷貝」

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

淺拷貝與深拷貝

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