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 相关文章推荐
javascript 的Document属性和方法集合
Jan 25 Javascript
超级酷和最实用的jQuery实例收集(20个)
Apr 21 Javascript
15个款优秀的 jQuery 图片特效插件推荐
Nov 21 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
Jan 03 Javascript
基于jQuery实现动态搜索显示功能
May 05 Javascript
JavaScript知识点总结(十)之this关键字
May 31 Javascript
angularjs 获取默认选中的单选按钮的value方法
Feb 28 Javascript
Mint UI实现A-Z字母排序的城市选择列表
Dec 28 Javascript
Vue按时间段查询数据组件使用详解
Aug 21 Javascript
使用Vue实现一个树组件的示例
Nov 06 Javascript
详解JavaScript原型与原型链
Nov 16 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使用smarty模板引擎的方法
2014/07/01 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
基于jQuery的可以控制左右滚动及自动滚动效果的代码
2010/07/25 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
2012/06/20 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
JavaScript获取键盘按键的键码(参照表)
2017/01/10 Javascript
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
线程安全及Python中的GIL原理分析
2019/10/29 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
python自动化发送邮件实例讲解
2021/01/04 Python
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
英国设计师珠宝网站:Joshua James Jewellery
2020/03/01 全球购物
行政管理专业推荐信
2013/11/02 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
管理建议书范文
2014/05/13 职场文书
法律专业求职信
2014/05/24 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
创先争优公开承诺书
2014/08/30 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
教你利用python实现企业微信发送消息
2021/05/23 Python
python 算法题——快乐数的多种解法
2021/05/27 Python
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis