js中 4种浅拷贝方式

首先深拷贝,浅拷贝,都是基于指 引用类型的变量 在 堆内存 中的占用空间情况。

一、在栈内存中保存字符串,数字,布尔以及指向堆内存的变量地址等固定的值。

23f3516c2fcd6917e90e1e313e04288f.png

让另个一变量d 等于 a,相当于在栈内存中开辟了一个新空间。
栈中a和d已经是两个互不相干的变量,修改不影响对方。

二、在堆内存中保存函数、数组、对象,这些是不固定的值。

23f3516c2fcd6917e90e1e313e04288f.png

令d等于a,只会在栈内存中存入一个相同的地址(指向a指向的堆内存地址)。

23f3516c2fcd6917e90e1e313e04288f.png

此时改变d的值,a的值也会改变。
浅拷贝仅仅只是拷贝了a在栈内存的堆地址,仍然和a共用一个堆内存。

三、浅拷贝的几种方式:

①、Object.assign(target, ...source)

23f3516c2fcd6917e90e1e313e04288f.png

Object.assign() 只复制属性值。

23f3516c2fcd6917e90e1e313e04288f.png

23f3516c2fcd6917e90e1e313e04288f.png
②、扩展运算符 ...
③、arr.slice()
④、arr.concat()