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 相关文章推荐
静态页面的值传递(三部曲)
Sep 25 Javascript
一个简单的javascript类定义例子
Sep 12 Javascript
javascript中的取反再取反~~没有意义
Apr 06 Javascript
jquery插件推荐浏览器嗅探userAgent
Nov 09 Javascript
JS模式之简单的订阅者和发布者模式完整实例
Jun 30 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
Dec 25 Javascript
学习掌握JavaScript中this的使用技巧
Aug 29 Javascript
JavaScript随机生成颜色的方法
Oct 15 Javascript
JS表单数据验证的正则表达式(常用)
Feb 18 Javascript
解决vue热替换失效的根本原因
Sep 19 Javascript
微信小程序纯文本实现@功能
Apr 08 Javascript
el-form 多层级表单的实现示例
Sep 10 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 输入输出流详解及示例代码
2016/08/25 PHP
php将print_r处理后的数据还原为原始数组的解决方法
2016/11/02 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
javascript获取鼠标点击元素对象(示例代码)
2013/12/20 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
jQuery统计指定子元素数量的方法
2015/03/17 Javascript
javascript实现简易计算器
2017/02/01 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
如何让微信小程序页面之间的通信不再变困难
2019/06/03 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
总结Python编程中三条常用的技巧
2015/05/11 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
在Pytorch中计算自己模型的FLOPs方式
2019/12/30 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
2020/03/16 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
CSS3 display知识详解
2015/11/25 HTML / CSS
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
详解HTML5中rel属性的prefetch预加载功能使用
2016/05/06 HTML / CSS
捷克玩具商店:Bambule
2019/02/23 全球购物
党的群众路线个人对照检查材料
2014/09/23 职场文书
支行行长岗位职责
2015/02/15 职场文书
新员工入职感想
2015/08/07 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android
Nginx工作模式及代理配置的使用细节
2022/03/21 Servers
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技
JS前端使用canvas实现物体的点选示例
2022/08/05 Javascript