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获取浏览器的可视区域尺寸的实现代码
Nov 30 Javascript
JavaScript也谈内存优化
Jun 06 Javascript
javascript中callee与caller的区别分析
Apr 20 Javascript
javascript常见数字进制转换实例分析
Apr 21 Javascript
关于vue-router路径计算问题
May 10 Javascript
Bootstrap多级菜单的实现代码
May 23 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
May 26 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
Nov 02 Javascript
JS中比较两个Object数组是否相等方法实例
Nov 11 Javascript
浅析JS中NEW的实现原理及重写
Feb 20 Javascript
JQuery插件tablesorter表格排序实现过程解析
May 28 jQuery
基于 Vue 的 Electron 项目搭建过程图文详解
Jul 22 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
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
2020/05/02 PHP
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
js操作CheckBoxList实现全选/反选(在客服端完成)
2013/02/02 Javascript
js的toUpperCase方法用法实例
2015/01/27 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
Vue 使用 Mint UI 实现左滑删除效果CellSwipe
2018/04/27 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
Python工厂函数用法实例分析
2018/05/14 Python
python 常见字符串与函数的用法详解
2018/11/23 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
python 如何调用 dubbo 接口
2020/09/24 Python
css3 box-sizing属性使用参考指南
2013/01/08 HTML / CSS
html5 学习简单的拾色器
2010/09/03 HTML / CSS
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
高三英语教学反思
2014/01/13 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
《小猪家的桃花树》教学反思
2014/04/11 职场文书
敬老院献爱心活动总结
2014/07/08 职场文书
公司董事长助理工作职责
2014/07/12 职场文书
2014党员四风对照检查材料思想汇报
2014/09/17 职场文书
单位租房协议书样本
2014/10/30 职场文书
出差报告格式模板
2014/11/06 职场文书
小学数学教学随笔
2015/08/14 职场文书
pytorch中的model=model.to(device)使用说明
2021/05/24 Python
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js