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 闭包引起的IE内存泄露分析
May 23 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
Nov 25 Javascript
js中自定义方法实现停留几秒sleep
Jul 11 Javascript
jQuery遍历之next()、nextAll()方法使用实例
Nov 08 Javascript
js实现图片和链接文字同步切换特效的方法
Feb 20 Javascript
jQuery实现当前页面标签高亮显示的方法
Mar 10 Javascript
JavaScript中setFullYear()方法的使用详解
Jun 11 Javascript
谷歌Chrome浏览器扩展程序开发小记
Jan 06 Javascript
基于Vue如何封装分页组件
Dec 16 Javascript
vue-router项目实战总结篇
Feb 11 Javascript
js对象数组和对象的使用实例详解
Aug 27 Javascript
JS实现无限轮播无倒退效果
Sep 21 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
德劲1103二次变频版的打磨
2021/03/02 无线电
Smarty+QUICKFORM小小演示
2007/02/25 PHP
php调用google接口生成二维码示例
2014/04/28 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
2016/10/05 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
简单谈谈Javascript函数中的arguments
2017/02/09 Javascript
超全面的javascript中变量命名规则
2017/02/09 Javascript
jQuery自定义图片上传插件实例代码
2017/04/04 jQuery
浅谈node模块与npm包管理工具
2018/01/03 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
Python中的类与对象之描述符详解
2015/03/27 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
Python try except异常捕获机制原理解析
2020/04/18 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
canvas学习和滤镜实现代码
2018/08/22 HTML / CSS
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
英国网上超市:Ocado
2020/03/05 全球购物
办理暂住证介绍信
2014/01/11 职场文书
演讲主持词
2014/03/18 职场文书
物流管理专业推荐信
2014/09/06 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书
护士医德医风心得体会
2016/01/25 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL