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)不同,但又不是像深拷贝一样完全新建数据,而是只新建了一层。

0
0

双越

2021-12-29

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

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

0
0

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4713 学习 · 1683 问题

查看课程