千家信息网

JavaScript数组中的深复制与浅复制是什么

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"JavaScript数组中的深复制与浅复制是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够
千家信息网最后更新 2026年11月03日JavaScript数组中的深复制与浅复制是什么

本篇内容介绍了"JavaScript数组中的深复制与浅复制是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

介绍数组的深复制与浅复制,首先给大家回顾回顾数据类型

数据类型

1、基本数据类型::number string boolean null undefined

  • 存储方式: 基本数据类型存储在栈内存中
    变量存储的就是值

2、引用数据类型:function 数组 对象(下篇介绍)

  • 存储方式: 引用数据类型存储在堆内存中
    变量存储的是地址。【相关推荐:javascript学习教程】

至于存储方式我们来分析分析:

先给大家介绍介绍栈内存与堆内存,作为了解:

  • 栈内存:引擎执行代码时工作的内存空间,除了引擎,也用来保存基本值和引用类型值的地址。

  • 堆内存:用来保存一组无序且唯一的引用类型值,可以使用栈中的键名来取得。

我们再来看:

   var a = 2;        var b = a;        b++;//3        console.log(a); //2

分析分析,将a的值赋值给b,接着改变b的值,a的值没有受到影响。但是引用数据类型,那就不是这样了,赋值的是地址。

   var arr = [1,2,3] ;        var arr2 = arr ;        arr2.push(4) ;        console.log(arr);   // arr发生了改变

分析分析,arr复制的是地址,何为地址,可以比作成一个房间,arr和arr2都是指向的这个房间,改变这个房间的结构,arr和arr2都会受到影响。如下图

了解上面后,接着重点

深复制与浅复制

  • 数组的浅复制:只复制了地址 (共享地址)

  • 数组的深复制:复制值
    遍历(把原数组中的值存入新的数组) var arr2 = [] ;
    slice() 截取数组中的所有值,得到的是一个新数组。 就是要在堆内存中开辟一个新的空间。

数组的浅复制:

只复制了地址 (共享地址)

   var arr = [1,2,3,4,5] ;        // 数组的浅复制 --- 只是复制了地址         var arr2 = arr ;    //改变其中一个数组,两个数组都会改变,

还是很简单理解浅复制的。

数组的深复制:

复制数组中的值

1、定义一个新的空数组,遍历原数组并赋值给新数组

 var arr = [1, 2, 3, 4, 5]        var arr3 = [];        arr.forEach(function(v) {            arr3.push(v)        })        console.log(arr3);        arr3.push('a');        console.log(arr, arr3);//arr[1,2,3,4,5],arr3[1,2,3,4,5,'a']

改变新数组中的值,原数组不会改变

2、slice() 截取数组中的所有值,得到的是一个新数组

        var arr3 = arr.slice() ;        console.log(arr3);        arr3.push('a') ;        console.log(arr3);//[1,2,3,4,5,'a']        console.log(arr);//[1,2,3,4,5]

改变新数组中的值,原数组不会改变

在这里提一嘴:

基本数据类型传递是值 ,引用数据类型传递的是地址(形参和实参共享地址)

难点难点,多维数组的深复制,以上提到的都是一维数组的深复制和浅复制

二维数组:二维数组本质上是以数组作为数组元素的数组,即"数组的数组",例如:arr=[[1,2,3],[1,2],[1,2,3,4]]
分析以下代码,为二维数组的遍历,变量i,j代表的就是,下标为i元素(也就是数组)中的第 j+1个元素。

 var arr = [            [1, 2, 3],            [4, 5, 6],            [2, 3, 4]        ]        for (var i in arr) {            for (var j in arr[i]) {                console.log(arr[i][j]);            }        }

多维数组:三维及其以上的数组

多维数组的深复制

多维数组的深复制可不像一维数组那样好判断,因为你无法判断数组中的元素是否又是数组,数组中有数组,无止境,哈哈,所以就需要用到前面提到的递归。
用到的方法:Array.isArray(arr[i])判断数组,返回布尔值。

思路:判断多维数组的元素是否是数组,是的话,继续遍历这个数组,在判断,如果不是,就可以用一维数组的判断方式来实现深复制。

"JavaScript数组中的深复制与浅复制是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

数组 地址 类型 数据 内存 分析 存储 元素 多维 方式 变量 就是 房间 还是 一维 二维 代码 内容 引擎 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海卓越科技互联网 美国互联网保险保险科技 互联网与新科技 互联网科技股票 腾讯科技 互联网女皇 碳银互联网科技有限公司 上海卓越科技 互联网 哈尔滨秒房互联网科技有限公司 汉立互联网科技有限公司联系电话 互联网科技产品 青岛中康互联网医疗科技有限公司 恒银科技与互联网金融 福州新华互联网科技学校 知乎 赶超互联网科技 微信多开 四川慕妮娅互联网科技有限公司 徐州市互联网科技有限公司 众安科技工业互联网合作 产业互联网科技服务公司 山东大美朱楼互联网科技有限公司 杭州科技互联网公司有哪些 互联网科技工作委员会 互联网是不是新科技 疫情对互联网科技公司影响 青岛互联网科技公司 新华互联网科技校企合作 博兴的互联网电子科技公司 剑昆互联网络科技有限公司临桂 怎样加入科技互联网 杭州融税互联网科技有限公司 广东猫王互联网科技有限公司电话
0