- 淺拷貝只是拷貝一層,更深層次對(duì)象級(jí)別的只拷貝引用
- 深拷貝拷貝多層朝扼,每一級(jí)別的數(shù)據(jù)都會(huì)拷貝
- Object.assgin(target,...sources) ES6新增方法可以淺拷貝
淺拷貝
var obj = {
id :1,
name : '蜘蛛俠',
msg : {
age: 20
}
}
var o = {};
//方法一
for (var i in obj){
o[i] = obj[i];
}
//方法2
Object.assign(o,ibj);
//淺拷貝第一層之外的更深層只是拷貝的引用也就是地址還是同一個(gè)對(duì)象,修改更深層次的數(shù)據(jù)恕稠,拷貝前和拷貝過(guò)的都會(huì)改變
深拷貝
var obj = {
id :1,
name : '蜘蛛俠',
msg : {
age: 20
},
emotion:['happy','sad']
}
var o = {};
//利用 遞歸
function Copy(newobj,oldobj){
for(var i in oldobj){
// 判斷屬性值的數(shù)據(jù)類型
var item = oldobj[i];
if(item instanceof Array){//數(shù)組屬于Object 需要先判斷是否屬于數(shù)組
newobj[i] = [];
Copy(newobj[i],item)
}else if(item instanceof Object ){
newobj[i] = {};
Copy(newobj[i],item)
}else {
newobj[i] = item;
}
}
}
Copy(o,obj);
//深拷貝 是把數(shù)據(jù)完整的拷貝一份晾蜘,是新生成另外一個(gè)對(duì)象,改其中一個(gè)對(duì)象的數(shù)據(jù)波桩,另外一個(gè)不受影響