聊及深浅拷贝通常出现在这种情况下;讲一个变量值赋值给另外一个变量之后,当改变其中一方另外一方也会随之改变;这是由于赋值时候是赋值的是引用地址,而并非重新拷贝到另外一个内存之中。
浅拷贝(浅拷贝有两种解决方案)
//Object.assign()的用法
const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target); //{ a: 1, b: 4, c: 5 }
console.log(returnedTarget); //{ a: 1, b: 4, c: 5 }
//浅拷贝中的用法
let a = {age:1}
let b = Object.assign({},a)
a.age = 2;
console.log(a); //{age:2}
console.log(b); //{age:1}
let a = {age:1};
let b = {...a}
a.age = 2;
console.log(a); //{age:2}
console.log(b); //{age:1}
- 浅拷贝无法解决的问题:
let a = {
age:1,
jobs:{
first:'web'
}
}
let b = {...a};
a.jobs.first = 'engineer';
console.log(a.jobs.first); //engineer
console.log(b.jobs.first); //engineer
深拷贝
let a = {
age:1,
jobs:{
first:'web'
}
}
let b = JSON.parse(JSON.stringify(a));
a.jobs.first = 'engineer';
console.log(a.jobs.first); //engineer
console.log(b.jobs.first); //web