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选择器的年代 不了解它们的性能,行吗
Jun 18 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
Mar 25 Javascript
jquery.Ajax()方法调用Asp.Net后台的方法解析
Feb 13 Javascript
JS实现的自定义右键菜单实例二则
Sep 01 Javascript
JavaScript微信定位功能实现方法
Nov 29 Javascript
javascript ES6中箭头函数注意细节小结
Feb 17 Javascript
AngularJS实现页面定时刷新
Mar 14 Javascript
jQuery ajax请求struts action实现异步刷新
Apr 19 jQuery
React优化子组件render的使用
May 12 Javascript
js实现for循环跳过undefined值示例
Jul 02 Javascript
使用p5.js实现动态GIF图片临摹重现
Oct 23 Javascript
为什么推荐使用JSX开发Vue3
Dec 28 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
PHP在Web开发领域的优势
2006/10/09 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
JavaScript 调试器简介
2009/02/21 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
发布一款npm包帮助理解npm的使用
2019/01/03 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
详解Vue的mixin策略
2020/11/19 Vue.js
Vue——前端生成二维码的示例
2020/12/19 Vue.js
python处理csv数据的方法
2015/03/11 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
Python编程实现的简单Web服务器示例
2017/06/22 Python
Python笔记之代理模式
2019/11/20 Python
python logging.basicConfig不生效的原因及解决
2020/02/20 Python
对python中return与yield的区别详解
2020/03/12 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
计算机应用职专应届生求职信
2013/11/12 职场文书
上学迟到的检讨书
2014/01/11 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
语文教学感言
2014/02/06 职场文书
公务员平时考核实施方案
2014/03/11 职场文书