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 相关文章推荐
轻轻松松学JS调试(不下载任何工具)
Apr 14 Javascript
关于Javascript模块化和命名空间管理的问题说明
Dec 06 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
Jan 27 Javascript
js日期联动示例
May 02 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
Feb 02 Javascript
jQuery Real Person验证码插件防止表单自动提交
Nov 06 Javascript
详解Angular开发中的登陆与身份验证
Jul 27 Javascript
理解AngularJs篇:30分钟快速掌握AngularJs
Dec 23 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
Jul 05 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
Jan 24 Javascript
微信小程序实现长按删除图片的示例
May 18 Javascript
Openlayers+EasyUI Tree动态实现图层控制
Sep 28 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
一个没有MYSQL数据库支持的简易留言本的编写
2006/10/09 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
全面解析bootstrap格子布局
2016/05/22 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
Python实现的简单发送邮件脚本分享
2014/11/07 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
Python3 模块、包调用&amp;路径详解
2017/10/25 Python
浅析python打包工具distutils、setuptools
2018/04/20 Python
Python实现接受任意个数参数的函数方法
2018/04/21 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
HTML5新控件之日期和时间选择输入的实现代码
2018/09/13 HTML / CSS
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
加热夹克:RAVEAN
2018/10/19 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
生态学毕业生自荐信
2013/10/27 职场文书
大学军训感言1000字
2014/02/25 职场文书
企业法人代表证明书
2014/09/27 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
教师聘用意向书
2015/05/11 职场文书
酒会开场白大全
2015/06/01 职场文书
给校长的建议书范文
2015/09/14 职场文书
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript