深拷贝和浅拷贝的源码区别解析

问题描述

这两个的区别是一个开创了新的内存空间,另一个只是引用关系,但我想知道源码里面的区别,为什么会导致深拷贝和浅拷贝功能的区别

相关代码

this.dataInfo = JSON.parse(JSON.stringify(data[0][0]));
this.dataInfo = data[0][0];

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 1.4k
2 个回答

如果是浅拷贝,两个的值则会相互影响,而深拷贝则不会

data[0][0]={a:1}
this.dataInfo = JSON.parse(JSON.stringify(data[0][0]));
data[0][0]={a:2}
console.log(this.dataInfo) // {a:1}
this.dataInfo={a:3}
console.log(data[0][0]) // {a:2}
data[0][0]={a:1}
this.dataInfo = data[0][0];
data[0][0]={a:2}
console.log(this.dataInfo) // {a:2}
this.dataInfo={a:3}
console.log(data[0][0]) // {a:3}

浅拷贝只是新开一个别名来引用这个内存区。

深拷贝会重新开辟一个内存区,并把之前内存区的值复制进来,这样两个内存区初始值是一样的,但接下去的操作互不影响。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题