关于js浅拷贝与深拷贝

        前几天面试,笔试时有道题是要自己写一个例子实现深拷贝,顿时懵逼了。深拷贝也不是没接触过,只是以前实际项目中没有运用,后来就只记得有这么个概念,更没有深究其原理。现在我来说说我对js深拷贝最新的理解。

        js数据类型存储方式

        基本类型:undefined,null,Boolean,Number和String,这些类型分别在内存中占有固定的大小空间,它们的值保存在栈空间,我们通过按值来访问的。

        引用类型:对象、数组、函数等。对于引用类型的值,则必须在堆内存中为这个值分配空间。由于引用类型值的大小不固定(对象有很多属性和方法,而且还可以动态的添加属性和方法),因此不能把他们保存到栈内存中。但内存地址大小是固定的,因此可以将内存地址保存在栈内存中。

        简而言之:栈内存中存放的是基本数据类型值,堆内存中存放的是引用类型值,引用类型值在内存中的地址存放在栈中,也就是我们常说的对象对象引用(指针)。


栈与堆

        浅拷贝

        浅拷贝就是将值简单的赋给其他变量,用来备份数据,但很多时候,会得到不是我们想要得到的结果,让我们来看下面这段代码:


        从上面例子可以看出:在变量复制方面,基本类型和引用类型有所不同,基本类型复制的是值本身,而引用类型复制的是内存地址,如果有一个对象值变化了,另一个也会跟着变化。

        深拷贝

        所谓”深拷贝”,就是能够实现真正意义上的数组和对象的拷贝。它的实现并不难,只要递归调用”浅拷贝”就行了。

        这样就实现数组和对象的深拷贝。

        很简单吧,赶快试一试哦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文思维导图如下: 本文首发于我的个人网站: http://cherryblog.site/本文作者: Cherr...
    sunshine小小倩阅读 1,044评论 2 14
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,744评论 0 11
  • 值类型与引用类型 谈浅拷贝与深拷贝之前,我们需要先理清一个概念,即值类型与引用类型。 什么是值类型与引用类型?这要...
    franose阅读 626评论 1 8
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • 我是关了手机,中断了所有的联系来写这篇文章的。我怕中间哪怕一点的打扰都可能让我不敢再写下去,不是因为没所谓的灵感,...
    阮佳欣阅读 386评论 0 1