angularJS深拷贝详解


Posted in Javascript onMarch 23, 2017

在了解angular深拷贝之前,首先看下边的代码。

var a = 1;
var b = a;
b = 2;
console.log(a + " " + b);

很显然,输出的a的值是1,b的值是2。接下来再看一段代码。

var a = [1,2,3,4];
var b = a;
b.push(5);
console.log(a + " " + b);

很显然,输出a的值是[1,2,3,4,5],b的值是[1,2,3,4,5]。再来看下一段代码。

var a = {
  name:"zhangsan",
  age:20
}
var b = a;
b.name = "lisi";
b.age = 30;
console.log(a + " " + b);

很显然,输出的a和b的值都是{name:"lisi",age:30}。这是为什么呢?

在JavaScript或者其他语言中,都有深拷贝和浅拷贝这两个名词。在第一段代码中,a和b都是基本数据类型,当复制彼此的值之后,再改变值。此时a的值并没有随着b的值的改变而改变,这就是深拷贝。当数据类型为数组或者对象这些复杂数据类型时,复制到数组或者对象之后,再改变数组或者对象的值,a的值也随着b的值改变而改变,这就是浅拷贝。

怎样解决深拷贝这个问题呢?

数组数据类型:使用concat()方法。b = a.concat();此时改变b的值,a的值就不会随着b的值的改变而改变。

对象数据类型:b.name = a.name; b.age = a.age;此时,改变b的值,a的值就不会随着b的值的改变而改变。但是,该方法需要知道a对象里边都有哪些字段。一个一个的复制,特别麻烦。

AngularJS的深拷贝

使用angular的同学可能都忽略了angularJS自带的封装好的方法。angular.isString(), angular.isNumber(),angular.isArray() , angular.isFunction() 等等。其中解决深拷贝的方法angular.copy(),能够解决深拷贝的问题。如下:

var a = {
  name :"zhangsan",
  age : 20
}
var b = angular.copy(a);

此时,改变b的值,a的值就不会随着b的值的改变而改变,也就解决了深拷贝的问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js+csss实现的一个带复选框的下拉框
Sep 29 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
Dec 29 Javascript
jquery.validate提示错误信息位置方法
Jan 22 Javascript
js实现弹窗暗层效果
Jan 16 Javascript
Node.js和Express简单入门介绍
Mar 24 Javascript
详解React中的组件通信问题
Jul 31 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
May 03 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
May 16 Javascript
vue $set 给数据赋值的实例
Nov 09 Javascript
解决vue 退出动画无效的问题
Aug 09 Javascript
JavaScript实现页面高亮操作提示和蒙板
Jan 04 Javascript
uniapp开发打包多端应用完整方法指南
Dec 24 Javascript
canvas实现环形进度条效果
Mar 23 #Javascript
Javascript实现登录记住用户名和密码功能
Mar 22 #Javascript
jquery实现图片平滑滚动详解
Mar 22 #jQuery
JavaScript中在光标处插入添加文本标签节点的详细方法
Mar 22 #Javascript
jQuery轻松实现无缝轮播效果
Mar 22 #jQuery
JavaScript登录记住密码操作(超简单代码)
Mar 22 #Javascript
原生JS京东轮播图代码
Mar 22 #Javascript
You might like
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
Smarty+QUICKFORM小小演示
2007/02/25 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
JavaScript基本编码模式小结
2012/05/23 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
jQuery中prependTo()方法用法实例
2015/01/08 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
Angular2关于@angular/cli默认端口号配置的问题
2017/07/15 Javascript
ES6中Array.find()和findIndex()函数的用法详解
2017/09/16 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
js根据需要计算数组中重复出现某个元素的个数
2019/01/18 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
javascript/jquery实现点击触发事件的方法分析
2019/11/11 jQuery
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
Windows8下安装Python的BeautifulSoup
2015/01/22 Python
查看python下OpenCV版本的方法
2018/08/03 Python
python实现微信防撤回神器
2019/04/29 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
python实现暗通道去雾算法的示例
2020/09/27 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
使用pytorch实现线性回归
2021/04/11 Python
Python破解极验滑动验证码详细步骤
2021/05/21 Python
python字符串的一些常见实用操作
2022/04/06 Python