浅拷贝
只复制某个对象的指针,而不复制对象本身。
如果属性是基本类型,那拷贝的就是基本类型的值;如果属性为引用类型,拷贝的就是地址。当其中一个对象被改变后,另一个对象也会随之改变。
通俗的来说,当对象里面包含对象的时候,浅拷贝指挥拷贝一层,不会递归拷贝。
深拷贝
复制和创建一个一模一样的对象,不共享内存地址。当其中某一个对象被改变后,另一个对象也会随之改变。
会递归拷贝对象的所有属性。
常见的浅拷贝有:
Object.assign({},目标对象)
扩展运算符...
let obj = {
id:1,
child:{
name:'tom',
age:16
}
}
// 使用Object.assign()进行浅拷贝
let obj2 = Object.assign({},obj)
//使用扩展运算符进行浅拷贝
let obj3 = {...obj}
//当修改更深一层的age时,由于是浅拷贝,只拷贝第一层,所以第二层的age都会被改变
obj.id = 2
obj.child.age = 18
console.log(obj);
console.log(obj2);
console.log(obj3);
常见的深拷贝有:
JSON.parse(JSON.stringify(obj))
let obj = {
id:1,
child:{
name:'tom',
age:16
}
}
//深拷贝
let obj2 = JSON.parse(JSON.stringify(obj))
// 当修改id和age时,深拷贝后的对象都不会被改变
obj.id = 3
obj.child.age = 30
console.log(obj);
console.log(obj2);