浅拷贝只拷贝了引用,没有拷贝内容
如:
this.selectConList = [{id: '1', name: '方法单号', icon: 'icon-bianji'},
{id: '4', name: '辅单独导费发', icon: 'icon-bianji'},
{id: '21', name: '业对对对务日期起', icon: 'icon-bianji'},
{id: '3', name: '业务日单独期止', icon: 'icon-bianji'}]
this.listDataDetailSlice = [{id: '1', name: '方法单号', icon: 'icon-bianji'},
{id: '4', name: '辅导费发', icon: 'icon-bianji'},
{id: '21', name: '业务日期起', icon: 'icon-bianji'},
{id: '3', name: '业务日期止', icon: 'icon-bianji'}]
在执行了一次
for (let i = 0; i < this.listDataDetailSlice.length; i++) {
this.selectConList[i]= this.listDataDetailSlice[i]
}
这段代码之后,
this.selectConList = [{id: '1', name: '方法单号', icon: 'icon-bianji'},
{id: '4', name: '辅单独导费发', icon: 'icon-bianji'},
{id: '21', name: '业对对对务日期起', icon: 'icon-bianji'},
{id: '3', name: '业务日单独期止', icon: 'icon-bianji'}]
但是当在修改this.selectConList的值this.listDataDetailSlice得值会跟修改this.selectConList的值一样,因为在执行this.selectConList[i]= this.listDataDetailSlice[i]的时候只是将this.listDataDetailSlice[i]的引用给了this.selectConList[i]所以修改selectConList 等于修改listDataDetailSlice
深拷贝:
是对于一个对象的所有层次的拷贝包括内层与外层
实现方式有两种:一种通过JSON的parse和stringify方法实现
另一种通过递归
function deepCopy(obj){ //深拷贝
var newObj = {};
if(typeof obj != 'object'){
return obj;
}
for(var attr in obj){
newObj[attr] = deepCopy(obj[attr]);
}
return newObj;
}