【深度復制的坑】1、對象assign復制的假深度,2、數組slice復制的坑,3、還有數組map復制的坑
阿新 • • 發佈:2017-11-22
map 淺復制 跟著 turn spa ice 屬性 arr slice
1、對象復制的坑 Object.assign()
Object.assign() //淺復制 基本沒用 跟直接用= 一樣 Object.assign(true,{}) // 以為是深拷貝,其實只是一級屬性復制,比淺拷貝多深拷貝了一層而已。第二層一樣是淺拷貝,會改變原值
2、數組復制的坑,即使是slice復制,如果內部是對象的話,還是會地址指向,導致修改新數組的時候,老數組也改變
var arr = [{a:11},{a:11}]; //arr [{a:11},{a:11}] var arr1 = arr.slice(0); //arr1 [{a:11},{a:11}] arr1[0].a = 22 //以為arr不會跟著改變,結果竟然變了 //arr1 [{a:22},{a:11}] arr [{a:22},{a:11}]
結果證明,slice復制只是潛復制,不能深度復制對象內容
3、同樣是數組復制的坑,如果數組內容元素是對象的話,map也會改變改變原值的
var arr = [{a:11},{a:11}]; //arr [{a:11},{a:11}] arr.map(v=>{ v.b=22; return v; }) //是不是以為這根arr沒半毛錢關系,你太天真了,arr已經改變 //arr [{a:11,b:22},{a:11,b:22}] 已經多出來了個b屬性。。。。
【深度復制的坑】1、對象assign復制的假深度,2、數組slice復制的坑,3、還有數組map復制的坑