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 相关文章推荐
JS去除字符串两端空格的简单实例
Dec 27 Javascript
Linux下编译安装php libevent扩展实例
Feb 14 Javascript
浅谈关于JavaScript API设计的一些建议和准则
Jun 24 Javascript
js限制文本框只能输入中文的方法
Aug 11 Javascript
jQuery插件imgPreviewQs实现上传图片预览
Jan 15 Javascript
详解A标签中href=""的几种用法
Aug 20 Javascript
vue.js,ajax渲染页面的实例
Feb 11 Javascript
vue中本地静态图片路径写法
Mar 06 Javascript
脚手架vue-cli工程webpack的基本用法详解
Sep 29 Javascript
JavaScript中关于base64的一些事
May 06 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
Jun 13 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
Nov 16 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
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
javascript css float属性的特殊写法
2008/11/13 Javascript
ASP中进行HTML数据及JS数据编码函数
2009/11/11 Javascript
JavaScript 模拟用户单击事件
2009/12/31 Javascript
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
理解Javascript_08_函数对象
2010/10/15 Javascript
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
js中实现字符串和数组的相互转化详解
2016/01/24 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
js实现多图和单图上传显示
2019/12/18 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
vuecli3.x中轻松4步带你使用tinymce的步骤
2020/06/25 Javascript
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
python无限生成不重复(字母,数字,字符)组合的方法
2018/12/04 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
Python对Excel按列值筛选并拆分表格到多个文件的代码
2019/11/05 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
祖国在我心中演讲稿
2014/01/15 职场文书
数学系个人求职信范文
2014/01/30 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
英语演讲稿3分钟
2014/04/29 职场文书
2014法院四风问题对照检查材料思想汇报
2014/10/04 职场文书
小学感恩节活动策划方案
2014/10/06 职场文书
银行授权委托书格式
2014/10/10 职场文书
教师外出学习心得体会
2016/01/18 职场文书
python3美化表格数据输出结果的实现代码
2021/04/14 Python
MySQL创建高性能索引的全步骤
2021/05/02 MySQL
sql中mod()函数取余数的用法
2021/05/29 SQL Server