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 相关文章推荐
JS之小练习代码
Oct 12 Javascript
海量经典的jQuery插件集合
Jan 12 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
Sep 19 Javascript
node.js中的console.trace方法使用说明
Dec 09 Javascript
Jquery 实现table样式的设定
Jan 28 Javascript
javascript解决IE6下hover问题的方法
Jul 28 Javascript
关于JavaScript作用域你想知道的一切
Feb 04 Javascript
JavaScript中数组添加值和访问值常见问题
Feb 06 Javascript
微信小程序 Buffer缓冲区的详解
Jul 06 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
Jul 10 Javascript
JavaScript数组及常见操作方法小结
Nov 13 Javascript
Vue父组件向子组件传值以及data和props的区别详解
Mar 02 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模板的朋友必看的很多个顶级PHP模板引擎比较分析
2008/05/26 PHP
php数组函数序列之array_values() 获取数组元素值的函数与方法
2011/10/30 PHP
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
Javascript实现DIV滚动自动滚动到底部的代码
2012/03/01 Javascript
jQuery中判断一个元素是否为另一个元素的子元素(或者其本身)
2012/03/21 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
详解nodejs模板引擎制作
2017/06/14 NodeJs
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
2017/06/20 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
JS实现根据数组对象的某一属性排序操作示例
2019/01/14 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
wxPython:python首选的GUI库实例分享
2019/10/05 Python
python数据分析工具之 matplotlib详解
2020/04/09 Python
python小白学习包管理器pip安装
2020/06/09 Python
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
马来西亚在线时尚女装商店:KEI MAG
2017/09/28 全球购物
NFL墨西哥官方商店:Tienda NFL
2017/11/28 全球购物
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
戴尔马来西亚官网:Dell Malaysia
2020/05/02 全球购物
写自荐信要注意什么
2013/12/26 职场文书
幼儿园教学管理制度
2014/02/04 职场文书
公司财务流程之主管工作流程
2014/03/03 职场文书
爱国卫生月活动总结范文
2014/04/25 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
计算机专业自荐信
2015/03/05 职场文书
从事会计工作年限证明
2015/06/23 职场文书
React自定义hook的方法
2022/06/25 Javascript
Python find()、rfind()方法及作用
2022/12/24 Python