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 相关文章推荐
arguments对象
Nov 20 Javascript
js 浮动层菜单收藏
Jan 16 Javascript
jQuery load方法用法集锦
Dec 06 Javascript
jquery实现图片滚动效果的简单实例
Nov 23 Javascript
对js关键字命名的疑问介绍
Apr 25 Javascript
JavaScript通过join函数连接数组里所有元素的方法
Mar 20 Javascript
Jquery使用css方法改变样式实例
May 18 Javascript
JavaScript组件开发完整示例
Dec 15 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
Jan 04 Javascript
jQuery多文件异步上传带进度条实例代码
Aug 16 Javascript
vue2.0构建单页应用最佳实战
Apr 01 Javascript
vue中引入第三方字体文件的方法示例
Dec 17 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
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
kmock javascript 单元测试代码
2011/02/06 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
代码分析jQuery四种静态方法使用
2015/07/23 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
vue异步加载高德地图的实现
2018/06/19 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
详解Puppeteer前端自动化测试实践
2019/02/21 Javascript
webpack4 从零学习常用配置(小结)
2019/05/28 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
浅谈vue的第一个commit分析
2020/06/08 Javascript
[54:09]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python random模块常用方法
2014/11/03 Python
Python中的匿名函数使用简介
2015/04/27 Python
python3中int(整型)的使用教程
2017/03/23 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
python 实现在tkinter中动态显示label图片的方法
2019/06/13 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
毕业研究生的自我鉴定
2013/11/30 职场文书
《春天来了》教学反思
2014/04/07 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书
PostgreSQL出现死锁该如何解决
2022/05/30 PostgreSQL