js的深拷贝和浅拷贝的区别(说清楚深拷贝和浅拷贝的区别)

在前端面试中有个问题经常被提及,就是JavaScript中浅拷贝也深度拷贝的区别。如果是刚入门JavaScript的朋友可能都没有深度拷贝和浅拷贝的概念。今天小编就和大家说清楚JavaScript的深度拷贝和浅拷贝。

js的深拷贝和浅拷贝的区别(说清楚深拷贝和浅拷贝的区别)(1)

我们说的深度拷贝和浅拷贝主要是针对复杂数据类型,就是对象Object。因为对象(包括数组)在内存中的存放都会有引用的情况。简单来说就是对象的key和value不是存放在一起的。一般来讲,key会放到一个栈中存放,对应的值放在堆中存放。key有指针指向值存放的地方。

js的深拷贝和浅拷贝的区别(说清楚深拷贝和浅拷贝的区别)(2)

浅拷贝与深拷贝都可以实现在已有对象上再生出一份的作用。但是对象的实例是存储在堆内存中然后通过一个引用值去操作对象,由此拷贝的时候就存在两种情况了:拷贝引用和拷贝实例,这也是浅拷贝和深拷贝的区别。

  • 浅拷贝:浅拷贝是拷贝引用,拷贝后的引用都是指向同一个对象的实例,彼此之间的操作会互相影响。
  • 深拷贝:在堆中重新分配内存,并且把源对象所有属性都进行新建拷贝,以保证深拷贝的对象的引用图不包含任何原有对象或对象图上的任何对象,拷贝后的对象与原来的对象是完全隔离,互不影响。

说道这里聪明的你一定已经理解了它们的不同,我们再举个例子说明一下。


浅拷贝的例子:

js的深拷贝和浅拷贝的区别(说清楚深拷贝和浅拷贝的区别)(3)

深拷贝的例子:

js的深拷贝和浅拷贝的区别(说清楚深拷贝和浅拷贝的区别)(4)

JavaScript中实现深度拷贝的方法有很多,有兴趣的朋友可以自己研究一下。如果你觉得本篇文章对你有帮助,欢迎点赞,评论,转发。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页