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调试logger组件实现代码
Nov 20 Javascript
父子窗体间传递JSON格式的数据的代码
Dec 25 Javascript
javascript拖拽上传类库DropzoneJS使用方法
Dec 05 Javascript
document.compatMode的CSS1compat使用介绍
Apr 03 Javascript
JavaScript函数节流概念与用法实例详解
Jun 20 Javascript
jQuery获取select选中的option的value值实现方法
Aug 29 Javascript
JavaScript 数据类型详解
Mar 13 Javascript
Vuex简单入门
Apr 19 Javascript
移动端web滚动分页的实现方法
May 05 Javascript
关于JS与jQuery中的文档加载问题
Aug 22 jQuery
vue 设置 input 为不可以编辑的实现方法
Sep 19 Javascript
JavaScript 数组去重详解
Sep 15 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 301转向实现代码
2008/09/18 PHP
php UBB 解析实现代码
2011/11/27 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
2013/06/20 PHP
PHP判断密码强度的方法详解
2017/05/26 PHP
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
javascript常用函数(1)
2015/11/04 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
JS正则替换掉小括号及内容的方法
2016/11/29 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
微信小程序实现组件顶端固定或底端固定效果(不随滚动而滚动)
2020/04/09 Javascript
详解Python中的静态方法与类成员方法
2017/02/28 Python
Python实现自动为照片添加日期并分类的方法
2017/09/30 Python
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
详解关于Django中ORM数据库迁移的配置
2018/10/08 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
Mytheresa英国官网:拥有160多个奢侈品品牌
2016/10/09 全球购物
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
英国女士和男士时尚服装网上购物:Top Labels Online
2018/03/25 全球购物
中国旅游网站:途牛旅游网
2019/09/29 全球购物
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
2014/12/30 面试题
自我鉴定三原则
2014/01/13 职场文书
入党自我鉴定
2014/03/25 职场文书
研究生导师推荐信
2014/09/06 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
暑期社会实践证明书
2014/11/17 职场文书
2015年导购员工作总结
2015/04/25 职场文书
九年级化学教学反思
2016/02/22 职场文书
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
2021/06/11 Python
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python