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 相关文章推荐
javascript Array.prototype.slice使用说明
Oct 11 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
Mar 05 Javascript
JS调试必备的5个debug技巧
Mar 07 Javascript
JS实现的几个常用算法
Nov 12 Javascript
JavaScript实现多栏目切换效果
Dec 12 Javascript
关于Vue Webpack2单元测试示例详解
Aug 14 Javascript
react+ant design实现Table的增、删、改的示例代码
Dec 27 Javascript
详解a标签添加onclick事件的几种方式
Mar 29 Javascript
详解小程序开发经验:多页面数据同步
May 18 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
Nov 15 Javascript
JavaScript基于用户照片姓名生成海报
May 29 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
Aug 04 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
php入门之连接mysql数据库的一个类
2012/04/21 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
php 7新特性之类型申明详解
2017/06/06 PHP
使用JS操作页面表格,元素的一些技巧
2007/02/02 Javascript
JS之小练习代码
2008/10/12 Javascript
js 方法实现返回多个数据的代码
2009/04/30 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
jQuery版仿Path菜单效果
2011/12/15 Javascript
jquery制作select列表双向选择示例代码
2014/09/02 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
JS实现针对给定时间的倒计时功能示例
2017/04/11 Javascript
AngularJS 实现购物车全选反选功能
2017/10/24 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
vue切换菜单取消未完成接口请求的案例
2020/11/13 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
Python每天必学之bytes字节
2016/01/28 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
如何使用repr调试python程序
2020/02/28 Python
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
建筑结构施工专业推荐信
2014/02/21 职场文书
管理学院毕业生自荐信范文
2014/03/10 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
建国大业观后感600字
2015/06/01 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
八年级英语教学反思
2016/02/15 职场文书
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
Window server 2012 R2 AD域的组策略相关设置
2022/04/28 Servers