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 相关文章推荐
JSON JQUERY模板实现说明
Jul 03 Javascript
JQuery防止退格键网页后退的实现代码
Mar 23 Javascript
js获取当前月的第一天和最后一天的小例子
Nov 18 Javascript
js的for in循环和java里foreach循环的区别分析
Jan 28 Javascript
轻松实现javascript图片轮播特效
Jan 13 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
Jan 19 Javascript
学习JavaScript事件流和事件处理程序
Jan 25 Javascript
js H5 canvas投篮小游戏
Aug 18 Javascript
使用cookie绕过验证码登录的实现代码
Oct 12 Javascript
微信小程序自定义模态弹窗组件详解
Dec 24 Javascript
vue实现短信验证码输入框
Apr 17 Javascript
vue 数据双向绑定的实现方法
Mar 04 Vue.js
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 版本]
2007/03/20 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
Javascript 面向对象特性
2009/12/28 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
qTip 基于JQuery的Tooltip插件[兼容性好]
2010/09/01 Javascript
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
IE浏览器不支持getElementsByClassName的解决方法
2014/08/27 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
VUEX-action可以修改state吗
2019/11/19 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
python从入门到精通(DAY 2)
2015/12/20 Python
Python生成密码库功能示例
2017/05/23 Python
详解Python里使用正则表达式的ASCII模式
2017/11/02 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
python函数定义和调用过程详解
2020/02/09 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
完美解决IE8下不兼容rgba()的问题
2017/03/31 HTML / CSS
学校安全工作制度
2014/01/19 职场文书
项目合作意向书模板
2014/07/29 职场文书
四风问题班子对照检查材料
2014/09/27 职场文书
2014年合同管理工作总结
2014/12/02 职场文书
2014年乡镇个人工作总结
2014/12/03 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
经典爱情感言
2015/08/03 职场文书
python tkinter Entry控件的焦点移动操作
2021/05/22 Python