js中的深拷贝与浅拷贝

210 阅读1分钟

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,因为他们指向同一块地址。