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 相关文章推荐
基于JQuery的简单实现折叠菜单代码
Sep 15 Javascript
jQuery1.6 使用方法二
Nov 23 Javascript
Lazy Load 延迟加载图片的jQuery插件中文使用文档
Oct 18 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
Nov 19 Javascript
javaScript基础语法介绍
Feb 28 Javascript
javascript中CheckBox全选终极方案
May 20 Javascript
浅谈JavaScript超时调用和间歇调用
Aug 30 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
Aug 29 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
Mar 08 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
Sep 03 Javascript
基于Node的Axure文件在线预览的实现代码
Aug 28 Javascript
vue实现整屏滚动切换
Jun 29 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
php 发送带附件邮件示例
2014/01/23 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
2014/09/24 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
yii的入口文件index.php中为什么会有这两句
2016/08/04 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
PHP批斗大会之缺失的异常详解
2019/07/09 PHP
基于jQuery的Spin Button自定义文本框数值自增或自减
2010/07/17 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
2015/08/21 NodeJs
《JavaScript高级编程》学习笔记之object和array引用类型
2015/11/01 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
javascript随机变色实例代码
2019/10/15 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
Python通过正则表达式选取callback的方法
2015/07/18 Python
python实现windows下文件备份脚本
2018/05/27 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
python输入多行字符串的方法总结
2019/07/02 Python
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
.NET程序员的数据库面试题
2012/10/10 面试题
关于Java finally的面试题
2016/04/27 面试题
致垒球运动员加油稿
2014/02/16 职场文书
护士求职自荐信范文
2014/03/19 职场文书
异地年检委托书范本
2014/09/24 职场文书
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL