记笔记一个因数组赋值引起的深拷贝浅拷贝的学习

前言

今天写业务的时候发现一个问题:两个嵌套对象的数组分别赋值为新的常量,常量push合并,原数组也会合并。

复现问题

const newArr1 = oldArr1;
const newArr2 = oldArr2;
newArr1.push(newArr2); // 到这里newArr1和oldArr1都变了

问题原因

直接把原数组定义为常量,如const newArr1 = oldArr1,这是浅拷贝,浅拷贝数组在内存中指向的地址是相同的,所以newArr1被操作后oldArr1也会变化。

那么,如果是这样定义const newArr1 = [...oldArr1]呢?
这也是浅拷贝,无法解决问题。

解决方法:深拷贝

方法1:

const newArr1 = JSON.parse(JSON.stringify(oldArr1));
const newArr2 = JSON.parse(JSON.stringify(oldArr2));
newArr1.push(newArr2); // 这样就没问题了

方法2:

const [...newArr1] = oldArr1;
const [...newArr2] = oldArr2;

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理