接上篇:[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 為了封裝性和解耦,同型別的兩個物件之間進行賦值操作時,所有成員變數被複製,包括私有成員 指標變數。類的成員函式在傳遞或返回物件時都會進行物件複製產生臨時物件,比如函式呼叫時實參變為形參,以及函式返回物件。考慮到效能和使用者要求不同,編譯器不複製物件內部...