您的位置:首页 > 数码常识数码常识

js浅拷贝与深拷贝(js的深拷贝)

2025-05-14人已围观

js浅拷贝与深拷贝(js的深拷贝)
  js深拷贝在讲正题之前我们要先了解数据存储的方式

  js的深拷贝js深拷贝

  数据存储方式

  在讲之前我们要先知道值类型和引用类型的存储方式。

  在JavaScript数据类型中有两种数据类型。

  值类型:字符串(String)、数字 (Number)、布尔 (Boolean)、空(Null)、未定义(Undefined)、Symbol

  。存放在栈内存中的简单数据段,数据大小确定,内存空间大小可以分配。

  引用数据类型:对象 (Object) 、数组 (Array) 、函数 (Function) 。

  存放在堆内存中的对象,在栈内存中存的是一个指针,这个指针指向堆内存一个位置。再从堆内存中取得所需的数据。

  存储如下图:

  什么是浅/深拷贝

  讲完存储的方式,我们来讲讲浅拷贝和深拷贝

  拷贝也就是我们常常讲的copy,ctrl+c,ctrl+v,那么我们来看看例子

  当我们对分别值类型和引用类型进行赋值。

  现象:我们发现值类型并没有互相受到影响,然而数组(引用类型)brr数组添加元素的时候改变了arr数组。

  解释分析:浅拷贝只会发生在引用类型身上,对于引用类型如果只进行简单的赋值,只会赋值指向堆内存的指针,这种称为浅拷贝。而深拷贝就是完全拷贝一个引用类型,而不是地址指针。

  浅拷贝看下面这张原理图:

  深拷贝实现

  那么我们在赋值引用类型的时候肯定不能出现浅拷贝的现象,对原数据产生影响了。那么就要进行深拷贝

  1.通过JSON.stringify和JSON.parse

  可以深拷贝的数组和对象,但是不能拷贝函数,可以进行对象或者数组的嵌套拷贝。

  缺点:无法实现对对象中方法的深拷贝

  使用:

  例子:

  2.扩展运算符

  利用了对象的结构赋值特性方法。

  缺点:不对对象里面嵌套的对象进行深拷贝,相当于只是对一层引用对象进行深拷贝

  使用:

  例子:

  3.手写递归深拷贝函数

  完美解决

  函数:

  例子:

  上面就是小居数码小编今天给大家介绍的关于(js的深拷贝)的全部内容,希望可以帮助到你,想了解更多关于数码知识的问题,欢迎关注我们,并收藏,转发,分享。

  94%的朋友还想知道的:

  js创建对象的三种方式(javascript中创建对象的三种方法)

  node.js和vue.js的区别(nodejs和vuejs什么关系)

  js判断元素在不在数组中(js中判断数组中是否包含某元素的方法)

  Js操作数组(js数组常见方法)



  152730
 

很赞哦! ()

随机图文