深拷貝:把一個對象上的屬性和方法復(fù)制到另一個對象上她渴,改變其中一個對象上的東西不影響另一個對象
淺拷貝:把一個對象上的屬性和方法復(fù)制到另一個對象上,改變其中一個對象上的東西影響另一個對象
//深拷貝的實(shí)現(xiàn)
function cloneObj(obj){
var newObj = {};
if(obj instanceof Array){
newObj = [];
}
for(let key in obj){
var temp = obj[key];
newObj[key] = typeof temp === 'Object'?cloneObj(tmep):temp;
}
return newObj;
}
1匿沛、Object.assign() 如果對象的屬性值為簡單類型(string夹姥,number)蔑穴,通過Object.assign({},srcobj);得到的新對象為深拷貝陷谱;如果屬性值為對象或其他引用類型,那對于這個對象而言其實(shí)是淺拷貝的
var obj = {a:1}
var newObj = Object.assign({}, obj)
newObj.a = 2
console.log(obj)//{a: 1}
console.log(newObj)//{a: 2}
var obj1 = {a:{c:1}}
var newObj1 = Object.assign({}, obj1)
newObj1.a.c = 2
console.log(obj1)//a: {c: 2}
console.log(newObj1)//a: {c: 2}
2鸥昏、擴(kuò)展運(yùn)算符[...arr](同上)
3塞俱、JSON.Stringify()(深拷貝)
let newArr = JSON.Parse(JSON.Stringify(oldArr))