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 DOM 编程艺术》读书笔记之JavaScript 简史
Jan 09 Javascript
浅谈javascript 归并方法
Jan 21 Javascript
阿里巴巴技术文章分享 Javascript继承机制的实现
Jan 14 Javascript
关于Javascript回调函数的一个妙用
Aug 29 Javascript
使用Angular缓存父页面数据的方法
Jan 03 Javascript
vue.js事件处理器是什么
Mar 20 Javascript
详解HTML5 使用video标签实现选择摄像头功能
Oct 25 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
Sep 25 Javascript
小程序登录态管理的方法示例
Nov 13 Javascript
vue-devtools的安装和使用步骤详解
Oct 17 Javascript
vue分页插件的使用方法
Dec 25 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 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+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
PHP的自定义模板引擎
2017/03/24 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
2017/09/26 PHP
Array对象方法参考
2006/10/03 Javascript
javascript取消文本选定的实现代码
2010/11/14 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
jQuery中 DOM节点操作方法大全
2017/10/12 jQuery
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
python实现sublime3的less编译插件示例
2014/04/27 Python
python用来获得图片exif信息的库实例分析
2015/03/16 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
2020/02/11 Python
TensorFlow获取加载模型中的全部张量名称代码
2020/02/11 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
英国二手物品交易网站:Preloved
2017/10/06 全球购物
最好的商品表达自己:Cafepress
2019/09/04 全球购物
党员领导干部廉洁从政承诺书
2014/03/27 职场文书
税务干部群众路线教育实践活动自我剖析材料
2014/09/21 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
新郎结婚保证书
2015/02/26 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技