javascript克隆对象深度介绍


Posted in Javascript onNovember 20, 2012

js一般有两种不同数据类型的值:

基本类型(包括undefined,Null,boolean,String,Number),按值传递;

引用类型(包括数组,对象),按址传递,引用类型在值传递的时候是内存中的地址。
克隆或者拷贝分为2种:

浅度克隆:基本类型为值传递,对象仍为引用传递。

深度克隆:所有元素或属性均完全克隆,并于原引用类型完全独立,即,在后面修改对象的属性的时候,原对象不会被修改。

function cloneObject(obj){ 
var o = obj.constructor === Array ? [] : {}; 
for(var i in obj){ 
if(obj.hasOwnProperty(i)){ 
o[i] = typeof obj[i] === "object" ? cloneObject(obj[i]) : obj[i]; 
} 
} 
return o; 
}

另:如果是一个简单的数组,元素中没有引用类型的值,可以直接用array.concat();或者array.slice(0);来深度拷贝一个数组,这样简单又高效。数组的concat()和slice()本来就会生成一个新的数组,原来的数组不会受影响。但是要注意的是你要确保被拷贝的数组中元素中没有引用类型的值。
这是另一种深度克隆的方法,很简单,很实用:
var s = JSON.stringify( obj ); 
var o = JSON.parse( s );
Javascript 相关文章推荐
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
Mar 30 Javascript
javascript获取隐藏dom的宽高 具体实现
Jul 14 Javascript
javaScript使用EL表达式的几种方式
May 27 Javascript
快速学习JavaScript的6个思维技巧
Oct 13 Javascript
jquery插件ajaxupload实现文件上传操作
Dec 09 Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
Feb 16 Javascript
玩转JavaScript OOP - 类的实现详解
Jun 08 Javascript
vue.js select下拉框绑定和取值方法
Mar 03 Javascript
JavaScript 下载svg图片为png格式
Jun 21 Javascript
vue项目部署到nginx/tomcat服务器的实现
Aug 26 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
Sep 21 Javascript
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
May 25 Vue.js
Extjs显示从数据库取出时间转换JSON后的出现问题
Nov 20 #Javascript
JS中toFixed()方法引起的问题如何解决
Nov 20 #Javascript
JavaScript实现拼音排序的方法
Nov 20 #Javascript
Js+Flash实现访问剪切板操作
Nov 20 #Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
Nov 19 #Javascript
jQuery 数据缓存模块进化史详细介绍
Nov 19 #Javascript
基于jquery库的tab新形式使用
Nov 16 #Javascript
You might like
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
php中 $$str 中 "$$" 的详解
2015/07/06 PHP
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
最常用的12种设计模式小结
2011/08/09 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
简单谈谈gulp-changed插件
2017/02/21 Javascript
js仿微信抢红包功能
2020/09/25 Javascript
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
微信小程序实现录音时的麦克风动画效果实例
2019/05/18 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
Python语言的面相对象编程方式初步学习
2016/03/12 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
Python爬虫工具requests-html使用解析
2020/04/29 Python
Python使用OpenPyXL处理Excel表格
2020/07/02 Python
Python-split()函数实例用法讲解
2020/12/18 Python
德国购买健身器材:AsVIVA
2017/08/09 全球购物
品质主管的岗位职责
2013/12/04 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
学风建设演讲稿
2014/09/12 职场文书
2015年银行大堂经理工作总结
2015/04/24 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
一文搞懂php的垃圾回收机制
2021/06/18 PHP
Vue3中的Refs和Ref详情
2021/11/11 Vue.js
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers