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 引发两次$(document.ready)事件
Jan 15 Javascript
用JS控制回车事件的代码
Feb 20 Javascript
THREE.JS入门教程(5)你应当知道的十件事
Jan 24 Javascript
javascript自启动函数的问题探讨
Oct 05 Javascript
jQuery实现两款有动画功能的导航菜单代码
Sep 16 Javascript
JAVA中截取字符串substring用法详解
Apr 14 Javascript
WdatePicker.js时间日期插件的使用方法
Jul 26 Javascript
javascript将json格式数组下载为excel表格的方法
Dec 22 Javascript
vuejs实现递归树型菜单组件
Jan 13 Javascript
JavaScript事件冒泡与事件捕获实例分析
Aug 01 Javascript
angularJs中ng-model-options设置数据同步的方法
Sep 30 Javascript
JS尾递归的实现方法及代码优化技巧
Jan 19 Javascript
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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
mysql5写入和读出乱码解决
2006/11/25 PHP
php 什么是PEAR?(第二篇)
2009/03/19 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
js 替换
2008/02/19 Javascript
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
JavaScript 高级篇之函数 (四)
2012/04/07 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
基于require.js的使用(实例讲解)
2017/09/07 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
Vue2.5通过json文件读取数据的方法
2018/02/27 Javascript
微信小程序实现换肤功能
2018/03/14 Javascript
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
python实现K最近邻算法
2018/01/29 Python
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
django解决订单并发问题【推荐】
2019/07/31 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
小学校长竞聘演讲稿
2014/05/16 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
讲座新闻稿
2015/07/18 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
2021/05/28 Python
Python3中最常用的5种线程锁实例总结
2021/07/07 Python