好久沒記錄了蚌铜,早上被問深淺拷貝給問懵了。
為什么要進行拷貝
因為對象是引用類型嫩海,所以賦值時的操作僅是賦予相同的地址冬殃,當對其中一個對象進行操作時,就會影響其他的對象叁怪。解決這個問題就需要拷貝了审葬。
var obj1={
value: 'a'
}
var obj2 = obj1;
obj2.value='b';
console.log(obj1);//{ value: 'b' }
1.淺拷貝----Object.assign();
var obj1={
value: 'a'
}
var obj2 = Object.assign({},obj1);
obj2.value='b';
console.log(obj1);//{ value: 'a' }
但是如果拷貝的源對象當中包含對象時,OBject.assign()方法只會拷貝對象的引用地址
var obj1={
value: 'a',
obj3:{
value2: 'c'
}
}
var obj2 = Object.assign({},obj1);
obj2.obj3.value2='b';
console.log(obj1);//{ value: 'a', obj3:{ value2: 'b' } }
2.深拷貝----JSON.parse(JSON.stringify(obj))
如果要拷貝的對象中包含對象奕谭,就需要深拷貝了
var obj={
name: 'znl',
age: 18,
friend:{
name: 'borys',
age: 20
},
arr:[1,2,[3,4]]
}
function copy(obj){
var type=Object.prototype.toString.call(obj);
if(!(type == '[object Array]' || type == '[object Object]')){
return 'Type Error!';
}
return JSON.parse(JSON.stringify(obj));
}
var obj2= copy(obj);
console.log(obj.friend === obj2.friend)//false
console.log(obj.arr === obj2.arr)//false