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 delete 引用类型对象
Nov 01 Javascript
jquery获取radio值(单选组radio)
Oct 16 Javascript
使用jquery制作弹出框效果
Apr 03 Javascript
AngularJs页面筛选标签小功能
Aug 01 Javascript
js实现PC端和移动端刮卡效果
Mar 27 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
Mar 23 jQuery
Vue实现路由跳转和嵌套
Jun 20 Javascript
微信小程序 如何引入外部字体库iconfont的图标
Jan 31 Javascript
Layui给数据表格动态添加一行并跳转到添加行所在页的方法
Aug 20 Javascript
Angular项目如何升级至Angular6步骤全纪录
Sep 03 Javascript
vue实现PC端录音功能的实例代码
Jun 05 Javascript
vue实现按钮切换图片
Jan 20 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批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
破解Session cookie的方法
2006/07/28 Javascript
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
将form表单中的元素转换成对象的方法适用表单提交
2014/05/02 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
JS生成随机打乱数组的方法示例
2017/12/23 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
Python抓取Discuz!用户名脚本代码
2013/12/30 Python
Python中的自定义函数学习笔记
2014/09/23 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
2018/07/13 Python
Python制作动态字符图的实例
2019/01/27 Python
python 实现让字典的value 成为列表
2019/12/16 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
美国Lolё官网:购买大胆而美丽的女性运动服装
2017/05/22 全球购物
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
住宅使用说明书
2014/05/09 职场文书
扬州个园导游词
2015/02/06 职场文书
杭白菊导游词
2015/02/10 职场文书
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技