js中的深拷贝与浅拷贝
1、概念
深拷贝与浅拷贝在其他语言中也经常被提及到,因为他们分别对应着值拷贝与引用拷贝。
- 深拷贝 :从字面上的意思理解,是指很深的拷贝,到底有多深呢?深到不仅拷贝值,而且还独立开辟了一个空间。我的理解是:拷贝的过程中的,独立地开辟了一个空间,这个对象指向这个地址,与原来的对象互不干扰。 深拷贝也被称为值拷贝。
- 浅拷贝 :从字面上的意思理解,是指比较浅的拷贝,他与原来的变量仍然指向同一个地址,两者之间相互影响,即其中一个改变会影响另一个的改变。 浅拷贝也被称为引用拷贝,引用的意思就是取了个别名,例如张三是大名,狗蛋是他的引用,即为小名,张三变了,狗蛋自然也变了,因为他们本质上就是指同一个人
2、js中的深拷贝(值拷贝)
js中的基本数据类型:String Number Boolean Null Undefined,在赋值的过程中都是值拷贝,
例如,let a=10;b=a,修改其中一个变量的值,不会影响到另一个变量的值
3、js中的浅拷贝(引用拷贝)
js中对象数据类型:Object Array Function Map Set,在赋值过程中都是引用拷贝
let obj = {
name:'jack',
age:'18',
}
let obj2 = obj
obj2.name = 'rose'
console.log(obj.name) // rose
console.log(obj2.name) //
当修改obj2的那么属性时,也会修改obj的name,因为他们指向同一块地址。