博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript 深拷贝
阅读量:4915 次
发布时间:2019-06-11

本文共 753 字,大约阅读时间需要 2 分钟。

javascript存在两种拷贝:浅拷贝、深拷贝。

它们最大的区别在于引用类型的拷贝上:浅拷贝复制的是引用(指针),深拷贝复制的是里面的数据。

由于以上原因,在下例中 浅拷贝修改的值影响了声明的对象a。

var a = {};var b= a;    //浅拷贝b.testStr = "我被改变了!";alert(a.testStr);    //显示"我被改变了";说明b的改变同时对a造成了影响

所以,为了避免这种情况,在javascript需要考虑可能进行深拷贝的类型有: Object{}、String、Array[];同时可能对深拷贝的判断造成影响的数据类型有undefined、null;(这部分有待更新)

1、在网上搜索了一个极其简单的深拷贝的方法,就是利用JSON的函数。

var dataObjCloned=JSON.parse(JSON.stringify( dataObj ))

这种方式十分简单,无需自己去写函数;但是是有局限性的,即“这种方法只在纯数据的数组或者对象克隆中有效”。具体的验证过程请参考 

对于存在“非纯数据的数组或者对象”的拷贝,则只能自己去写函数进行处理。

2、对于仅存在数组的深拷贝,请参考  ;其中包括两种方式,即使用.slice(0)或.concat();

3、对于同时包含其他类型、如对象等内容的深拷贝,需要自己写函数,请参考 

4、深拷贝要慎用,因为“对象或实例的属性不可能全部是公有的,一旦存在私有变量(原文中叫状态state),你这样的复制便毫无意义,因为会丢失这些数据”。具体请继续参考

5、利用jQuery的extend进行深拷贝,请参考

转载于:https://www.cnblogs.com/zldream1106/p/3177447.html

你可能感兴趣的文章
Extjs grid combo
查看>>
获取<考试>博文密码!o(*≧▽≦)ツ
查看>>
leetcode-Subsets II-90
查看>>
In 和Exists
查看>>
shell 命令下载软件 安装软件
查看>>
LCA的五种解法
查看>>
Python 拓展之详解深拷贝和浅拷贝
查看>>
JavaScript备忘录-闭包
查看>>
Java NIO系列教程(十一) Pipe
查看>>
串口屏的特点和开发步骤 + 最好的串口屏产品推荐 .....!
查看>>
数据验证
查看>>
JAVAWeb---HttpServletResponse中的方法
查看>>
一个不错的界面原型制作工具(Balsamiq Mockups)
查看>>
通过eclipse的egit插件提交提示Auth fail
查看>>
对象序列化
查看>>
UVA 208 Firetruck (DFS+剪枝)
查看>>
windows设置电脑的固定IP
查看>>
Python
查看>>
犀牛Phinoceros 如何切换中文语言
查看>>
Win7如何解决精简版的迅雷7无法运行
查看>>