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动态给table添加、删除行 改进版
Jan 19 Javascript
模仿百度三维地图的js数据分享
May 12 Javascript
精通Javascript系列之数据类型 字符串
Jun 08 Javascript
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
Aug 28 Javascript
js将json格式内容转换成对象的方法
Nov 01 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
Jun 06 Javascript
JavaScript模拟实现键盘打字效果
Jun 29 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
Jan 18 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
Jun 21 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
Feb 26 Javascript
vue 使用原生组件上传图片的实例
Sep 08 Javascript
深入了解Vue动态组件和异步组件
Jan 26 Vue.js
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
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
composer.lock文件的作用
2016/02/03 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
csdn 批量接受好友邀请
2009/02/19 Javascript
jquery text,radio,checkbox,select操作实现代码
2009/07/09 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
2011/07/28 Javascript
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
html+js实现动态显示本地时间
2013/09/21 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
微信小程序开发之Tabbar实例详解
2017/01/09 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
vue 实现走马灯效果
2019/10/28 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
python读取json文件并将数据插入到mongodb的方法
2015/03/23 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
python的pip安装以及使用教程
2018/09/18 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
python如何实现数据的线性拟合
2019/07/19 Python
vue常用指令代码实例总结
2020/03/16 Python
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
测绘工程个人的自我评价
2013/11/10 职场文书
取保候审保证书
2014/04/30 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
2015年世界粮食日演讲稿
2015/03/20 职场文书
部门优秀员工推荐信
2015/03/24 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技