美文网首页JavaScriptWeb前端之路
关于js浅拷贝与深拷贝

关于js浅拷贝与深拷贝

作者: 羊驼先生99 | 来源:发表于2017-06-14 21:36 被阅读112次

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

        js数据类型存储方式

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

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

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

栈与堆

        浅拷贝

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

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

        深拷贝

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

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

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

相关文章

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • js浅拷贝深拷贝

    js浅拷贝,深拷贝的简单实现 基础数据 浅拷贝 深拷贝

  • 浅拷贝和深拷贝

    本文参考:JavaScript中的浅拷贝和深拷贝js 深拷贝 vs 浅拷贝深入剖析 JavaScript 的深复制...

  • 关于js浅拷贝与深拷贝

    前几天面试,笔试时有道题是要自己写一个例子实现深拷贝,顿时懵逼了。深拷贝也不是没接触过,只是以前实际项目中...

  • js面试题

    1,js的深拷贝与浅拷贝 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,...

  • JS实现深拷贝、instanceof、判断是否为数组

    JS深拷贝 JS中拷贝对象可以按照拷贝的程度可以分为浅拷贝和深拷贝,有些时候我们需要拷贝之后的对象和拷贝之前的对象...

  • JS中对象的复制

    JS中的对象复制分为两种情况:深拷贝和浅拷贝。深拷贝和浅拷贝的区别在于对数组和对象的拷贝,对它们拷贝时浅拷贝只是拷...

  • iOS - 如何深拷贝Array内元素、自定义对象、及自定义对象

    关于深拷贝、浅拷贝,请看上篇iOS - 深拷贝、浅拷贝探索验证[https://www.jianshu.com/p...

  • 认识js下的浅拷贝与深拷贝

    浅拷贝与深拷贝 首先深拷贝和浅拷贝只针对像 Object, Array 这样的复杂对象的。简单来说,浅拷贝只拷贝一...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

网友评论

    本文标题:关于js浅拷贝与深拷贝

    本文链接:https://www.haomeiwen.com/subject/eqyeqxtx.html