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实现代码
May 23 Javascript
JavaScript自执行闭包的小例子
Jun 29 Javascript
网页右侧悬浮滚动在线qq客服代码示例
Apr 28 Javascript
json字符串之间的相互转换示例代码
Aug 21 Javascript
JQuery球队选择实例
May 18 Javascript
浅析JavaScript中的特殊数据类型
Dec 15 Javascript
使用Vue自定义数字键盘组件(体验度极好)
Dec 19 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
Feb 01 Javascript
webpack4 CSS Tree Shaking的使用
Sep 03 Javascript
extjs图表绘制之条形图实现方法分析
Mar 06 Javascript
vue+axios全局添加请求头和参数操作
Jul 24 Javascript
基于js实现的图片拖拽排序源码实例
Nov 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随机生成数字字母组合的方法
2015/03/18 PHP
UTF-8正则表达式如何匹配汉字
2015/08/03 PHP
PHP合并discuz用户脚本的方法
2015/08/04 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
2017/02/05 PHP
Google (Local) Search API的简单使用介绍
2013/11/28 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
Python通过DOM和SAX方式解析XML的应用实例分享
2015/11/16 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
python WindowsError的错误代码详解
2017/07/23 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
linecache模块加载和缓存文件内容详解
2018/01/11 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
python实现名片管理系统
2018/11/29 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
简单了解python PEP的一些知识
2019/07/13 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
关于Django Models CharField 参数说明
2020/03/31 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
护理专科自荐书范文
2014/02/18 职场文书
签约仪式主持词
2014/03/19 职场文书
报关报检委托书
2014/04/08 职场文书
爱我中华演讲稿
2014/05/20 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
学校捐书活动总结
2015/05/08 职场文书
2015年校医个人工作总结
2015/07/24 职场文书
《牧场之国》教学反思
2016/02/22 职场文书
js 实现验证码输入框示例详解
2022/09/23 Javascript