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}]
//concat也存在問題 [].concat(arr) 同樣潛複制
結果證明,slice複制隻是潛複制,不能深度複制對象内容
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屬性。。。。