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 相关文章推荐
基于jQuery的简单九宫格实现代码
Aug 09 Javascript
JavaScript创建类/对象的几种方式概述及实例
May 06 Javascript
js获取select标签选中值的两种方式
Jan 09 Javascript
node.js 使用ejs模板引擎时后缀换成.html
Apr 22 Javascript
对象题目的一个坑 理解Javascript对象
Dec 22 Javascript
vue.js如何将echarts封装为组件一键使用详解
Oct 10 Javascript
webpack项目调试以及独立打包配置文件的方法
Feb 28 Javascript
JS中双击和单击事件冲突的解决方法
Apr 09 Javascript
JS逻辑运算符短路操作实例分析
Jul 09 Javascript
iView-admin 动态路由问题的解决方法
Oct 03 Javascript
Vue触发式全局组件构建的方法
Nov 28 Javascript
vue 通过绑定事件获取当前行的id操作
Jul 27 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+js实现的无刷新下载文件功能示例
2019/08/23 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
扩展String功能方法
2006/09/22 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
js文字横向滚动特效
2015/11/11 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
vue-resource + json-server模拟数据的方法
2017/11/02 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
用Eclipse写python程序
2018/02/10 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
python 以16进制打印输出的方法
2018/07/09 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
python脚本当作Linux中的服务启动实现方法
2019/06/28 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
用python写爬虫简单吗
2020/07/28 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
美国气象仪器、花园装饰和墙壁艺术商店:Wind & Weather
2019/05/29 全球购物
如何将字串String转换成整数int
2015/02/21 面试题
学习雷锋精神演讲稿
2014/05/10 职场文书
十佳好少年事迹材料
2014/08/21 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
大学生党员自我批评思想汇报
2014/10/10 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
自我工作评价范文
2015/03/06 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB
Go语言实现一个简单的并发聊天室的项目实战
2022/03/18 Golang