请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Object assign到底是深拷贝还是浅拷贝

// 浅拷贝
const obj1 = {a: {b: 1}};
const obj2 = Object.assign({}, obj1);

obj1.a.b = 2;
obj2.a.b // 2

// 浅拷贝
var myobject={
a:"a",
b:"b",
c:"c",
}
var newobject=Object.assign({},myobject);
newobject.a=222;
myobject.a // 'a'

// 为什么第一个打印是2 第二个打印是'a' 如果按照第一个不应该是222

正在回答 回答被采纳积分+3

2回答

aibo 2023-02-14 20:00:33

Object.assign(res, obj);

是将obj“第一层”的所有key以值类型的形式存储在栈中,key值 如果是值类型则复制值,如果是引用类型则复制指针;

所以会出现你上面问题中的结果;

可以将Object.assign方法理解成一种只新建了一层数据的浅拷贝,因为它与单纯的复制指针(var res = obj)不同,但又不是像深拷贝一样完全新建数据,而是只新建了一层。

0 回复 有任何疑惑可以回复我~
双越 2021-12-29 17:19:53

深拷贝不能只考虑一层(想你写的 mybobject ,只有一层属性),得考虑多层。

否则为什么叫“深”拷贝呢。深,就代表这个意思。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信