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中的常用事件总结
Dec 27 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
Sep 02 Javascript
关于延迟加载JavaScript
May 05 Javascript
jQuery实现带水平滑杆的焦点图动画插件
Mar 08 Javascript
jquery制做精致的倒计时特效
Jun 13 Javascript
防止Node.js中错误导致进程阻塞的办法
Aug 11 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
Dec 08 Javascript
浅析bootstrap原理及优缺点
Mar 19 Javascript
node.js中axios使用心得总结
Nov 29 Javascript
js input输入百分号保存数据库失败的解决方法
May 26 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
Jul 24 Javascript
原生JavaScript实现随机点名表
Jan 14 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实现根据字符串生成对应数组的方法
2014/09/22 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
php简单生成随机数的方法
2015/07/30 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
JavaScript实现简单的tab选项卡切换
2016/01/05 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
js简单时间比较的方法
2016/08/02 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
2016/09/02 Javascript
详解webpack和webpack-simple中如何引入css文件
2017/06/28 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
javascript 代码是如何被压缩的示例代码
2020/05/06 Javascript
python 获取et和excel的版本号
2009/04/09 Python
python基础教程之数字处理(math)模块详解
2014/03/25 Python
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
Python实现把数字转换成中文
2015/06/29 Python
python制作爬虫爬取京东商品评论教程
2016/12/16 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
利用python批量爬取百度任意类别的图片的实现方法
2020/10/07 Python
Django框架实现在线考试系统的示例代码
2020/11/30 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
医学专业个人求职自荐信格式
2013/09/23 职场文书
委托培训协议书
2014/11/17 职场文书
八年级上册语文教学计划
2015/01/22 职场文书
教师思想工作总结2015
2015/05/13 职场文书
员工福利申请报告
2015/05/15 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书
html中两种获取标签内的值的方法
2022/06/16 jQuery