Object assign到底是深拷贝还是浅拷贝
来源:4-3 手写 JS 深拷贝

qq_追逐_23
2021-12-29
// 浅拷贝
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
写回答
2回答
-
aibo
2023-02-14
Object.assign(res, obj);
是将obj“第一层”的所有key以值类型的形式存储在栈中,key值 如果是值类型则复制值,如果是引用类型则复制指针;
所以会出现你上面问题中的结果;
可以将Object.assign方法理解成一种只新建了一层数据的浅拷贝,因为它与单纯的复制指针(var res = obj)不同,但又不是像深拷贝一样完全新建数据,而是只新建了一层。
00 -
双越
2021-12-29
深拷贝不能只考虑一层(想你写的 mybobject ,只有一层属性),得考虑多层。
否则为什么叫“深”拷贝呢。深,就代表这个意思。
00
相似问题