JS中数组和对象的 深复制(拷贝)与浅复制(拷贝)

JS中数组和对象的 深复制(拷贝)与浅复制(拷贝)

1.js中有五种简单的数据类型(null,string,undefined,number,boolean)和一种复杂数据类型(Object),当我们复制简单类型时,效果如下


也就是说 当b被重新赋值时 a并不会被改变。

但是当我们复制复杂的数据类型时以数组为例 ,效果如下


我们看到 当我们改变b的值时,a也被改变了,这显然不是我们想要的结果,所以便出现了深复制这个说法,下面以数组为例,说明一下数组深复制的方法。

2,数组的深复制

(1)for循环


循环赋值,改变b的值 不会影响a的值,下面穿插一个知识点: 数组中循环最好不要用for in ,因为for in 循环 会循环出原型链上的内容,当数组原型链上声明了方法,我们得到的结果就不是我们想要的了。

(2)slice方法

slice方法的定义为:返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素;

重点在  返回一个 新的数组 ,也就是说不会改变原数组,也就是达到了我们的目的


补充知识点:slice中参数为负数时,则用数组长度加上该数来确定相应的位置

(3)concat方法

concat() 方法用于连接两个或多个数组。该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本


链接一个空数组还是原有数组,从而达到复制的目的,生成新的数组,不会改变原有数组

(4)ES6的 “...“ 扩展运算符 : 将一个数组转为用逗号分隔的参数序列


3.对象的深复制

(1)for循环 实现深复制


(2)转换成json再转换成对象


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

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,448评论 0 4
  • javaScript的变量类型 基本类型:5种基本数据类型Undefined、Null、Boolean、Numbe...
    葶寳寳阅读 3,388评论 4 7
  • 1.背景介绍 什么是栈内存和堆内存? JavaScript中的变量的存放有有原始值与引用值之分,原始值代表了原始的...
    lx2487阅读 8,581评论 0 2
  • 大家好,我是IT修真院成都分院第7期的学员韩建名,一枚正直纯洁善良的WEB前端程序员。 1.背景介绍 在使用Jav...
    inh_阅读 2,806评论 0 0
  • 昨天,吃完午饭后,俺和俺的好朋友张袆凡,一起去操场后的饲养场喂狗去了,首先我们一人盛了一碗饭(他盛的饭的是土豆炖肉...
    先祖stone阅读 2,405评论 0 3