天天看點

【坑】【數組的坑】1、對象assign複制的假深度,2、數組slice複制的坑,3、還有數組map複制的坑

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屬性。。。。