JavaScript深拷贝和浅拷贝概念与用法实例分析


Posted in Javascript onJune 07, 2018

本文实例讲述了JavaScript深拷贝和浅拷贝概念与用法。分享给大家供大家参考,具体如下:

js中的浅拷贝和深拷贝,只是针对复杂数据类型(ObjcetArray)的复制问题。简单来讲浅拷贝和深拷贝都可以实现在原有对象的基础上再生成一份的作用。但是根据新生成的对象能否影响到原对象可以分为浅拷贝和深拷贝。

概念1:浅拷贝

浅拷贝就是指拷贝引用,新生成的引用和原来的引用都是指向同一个对象的实例,彼此之间的操作会相互影响。

概念2:深拷贝

在堆中重新开辟内存,把原引用对应的对象实例中所有的内容进行拷贝,因此保证了深拷贝的对象和原来的对象是完全隔离的,他们之间相互没有影响。

概念3:数组深拷贝的实现

1. 使用for循环

<script type="text/javascript">
  var arr1=['a','b','c'];
  var arr2=[];
  function deepCopy(arr1,arr2){
    for(var i=0;i<arr1.length;i++){
      arr2[i]=arr1[i];
    }
  }
  deepCopy(arr1,arr2);
  arr2[1]='d';
  console.log(arr1);//['a','b','c']
  console.log(arr2);//['a','d','c']
</script>

2. 使用slice()方法

<script type="text/javascript">
  var arr1=['a','b','c'];
  var arr2=arr1.slice(0);
  arr2[1]='d';
  console.log(arr1);//['a','b','c']
  console.log(arr2);//['a','d','c']
</script>

3. 使用concat方法

<script type="text/javascript">
    var arr1=['a','b','c'];
    var arr2=arr1.concat();
    arr2[1]='d';
    console.log(arr1);//['a','b','c']
    console.log(arr2);//['a','d','c']
</script>

概念4:对象的深拷贝

1. 使用for循环

<script type="text/javascript">
  var obj = {
    name: 'FungLeo',
    sex: 'man',
    old: '18'
  }
  function copyObj(obj) {
    let res = {}
    for (var key in obj) {
      res[key] = obj[key]
    }
    return res
  }
  var obj2 = copyObj(obj);
  obj2["name"]="kka";
</script>

2. 借助JSON来实现

<script type="text/javascript">
  var obj = {
    name: 'FungLeo',
    sex: 'man',
    old: '18'
  }
  var obj2=JSON.parse(JSON.stringif(obj));
  obj2["name"]="kka";
</script>

总结:以上就是实现数组和对象深拷贝的一些常用方法,可以结合具体的情形使用适合的方法。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript调试过程中找不到哪里出错的可能原因
Dec 16 Javascript
深入理解JavaScript系列(41):设计模式之模板方法详解
Mar 04 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
Mar 04 Javascript
基于jQuery实现的旋转彩圈实例
Jun 26 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
Oct 23 Javascript
全面解析Bootstrap中transition、affix的使用方法
May 30 Javascript
Jquery遍历select option和添加移除option的实现方法
Aug 26 Javascript
深入解析vue 源码目录及构建过程分析
Apr 24 Javascript
javascript实现留言板功能
Feb 08 Javascript
vue 获取元素额外生成的data-v-xxx操作
Sep 09 Javascript
JavaScript获取时区实现过程解析
Sep 24 Javascript
JavaScript中关于预编译、作用域链和闭包的理解
Mar 31 Javascript
AngularJS 前台分页实现的示例代码
Jun 07 #Javascript
浅谈PDF.js使用心得
Jun 07 #Javascript
vue better scroll 无法滚动的解决方法
Jun 07 #Javascript
vue translate peoject实现在线翻译功能【新手必看】
Jun 07 #Javascript
JavaScript 正则命名分组【推荐】
Jun 07 #Javascript
详解create-react-app 自定义 eslint 配置
Jun 07 #Javascript
vue.js实现标签页切换效果
Jun 07 #Javascript
You might like
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
php4的彩蛋
2006/10/09 PHP
一个改进的UBB类
2006/10/09 PHP
Sorting Array Values in PHP(数组排序)
2011/09/15 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
PHP实现将标点符号正则替换为空格的方法
2017/08/09 PHP
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
JavaScript获取和设置CheckBox状态的简单方法
2013/07/05 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
vue 使用自定义指令实现表单校验的方法
2018/08/28 Javascript
微信小程序点击view动态添加样式过程解析
2020/01/21 Javascript
梳理一下vue中的生命周期
2020/12/30 Vue.js
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
Python中分数的相关使用教程
2015/03/30 Python
查看django版本的方法分享
2018/05/14 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
python实现简单学生信息管理系统
2020/04/09 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
应届生护士求职信
2013/11/01 职场文书
厨师岗位职责
2013/11/12 职场文书
语文教育专业应届生求职信
2013/11/23 职场文书
财务与信息服务专业推荐信
2013/11/28 职场文书
捐赠仪式主持词
2014/03/19 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
2015年路政工作总结
2015/05/22 职场文书
小学三年级语文教学反思
2016/03/03 职场文书