JavaScript存储引用数据(对象)都是存地址的,存放在堆内存中的对象,在栈内存中存的是一个指针,这个指针指向堆内存一个位置。再从堆内存中取得所需的数据。
深拷贝拷贝前后数据的修改不会发生冲突,浅拷贝拷贝前后数据的修改会影响一起改变
深拷贝:对数据进行拷贝之后,修改拷贝之后的数据原数据不会发生改变,新数据在堆内存中重新开辟出来一个新的地址,两层数据保存的地址是独立的,所以数据互不影响。
浅拷贝:对数据进行拷贝之后,修改拷贝之后的数据原数据也会改变,新数据和原数据在栈内存中以指针的形式存储,并且同时指向了堆内存中同一个地址,所以修改拷贝之后的数据原数据也会改变,业务场景中浅拷贝经常会发生数据冲突
浅拷贝原理图
下面以举例子的形式,对比深拷贝和浅拷贝,以便于理解的更详细
对简单数据类型进行赋值修改
let c = 2
let b = c
b+=5
console.log(c,b) // 2,7
现象:简单数据类型之间的值没有互相影响</