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 正则表达式知识汇总
Dec 02 Javascript
js实现仿百度瀑布流的方法
Feb 05 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
Jun 30 Javascript
jQuery插件Validation快速完成表单验证的方式
Jul 28 Javascript
Boostrap实现的登录界面实例代码
Oct 09 Javascript
Bootstrap实现翻页效果
Nov 27 Javascript
vue.js $refs和$emit 父子组件交互的方法
Dec 20 Javascript
从零开始用electron手撸一个截屏工具的示例代码
Oct 10 Javascript
微信小程序城市选择及搜索功能的方法
Mar 22 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
Jun 18 Javascript
详解vue-flickity的fullScreen功能实现
Apr 07 Javascript
js实现时间日期校验
May 26 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
西德产收音机
2021/03/01 无线电
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
jQuery 学习第五课 Ajax 使用说明
2010/05/17 Javascript
js word表格动态添加代码
2010/06/07 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
2017/03/01 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
JavaScript实现点击出现子菜单效果
2021/02/08 Javascript
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
python中map的基本用法示例
2018/09/10 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
2019/08/13 Python
Python目录和文件处理总结详解
2019/09/02 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
2021/02/25 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
HTML5 LocalStorage 本地存储详细概括(多图)
2017/08/18 HTML / CSS
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
小学新学期寄语
2014/04/02 职场文书
电子工程求职信
2014/07/17 职场文书
怎样写离婚协议书
2014/09/10 职场文书
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
新员工入职欢迎词
2015/01/23 职场文书
2015年体检中心工作总结
2015/05/27 职场文书
MySql如何将查询的出来的字段进行转换
2022/06/14 MySQL
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers