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表达式中连续的 && 和 || 之赋值区别
Oct 17 Javascript
html+js实现动态显示本地时间
Sep 21 Javascript
JavaScript编写推箱子游戏
Jul 07 Javascript
Bootstrap每天必学之导航条
Nov 27 Javascript
angularjs实现文字上下无缝滚动特效代码
Sep 04 Javascript
js 概率计算(简单版)
Sep 12 Javascript
在React 组件中使用Echarts的示例代码
Nov 08 Javascript
元素全屏的设置与监听实例
Nov 28 Javascript
完美解决linux下node.js全局模块找不到的情况
May 16 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
Sep 14 Javascript
JavaScript数组去重的几种方法
Apr 07 Javascript
js和jquery判断数据类型的4种方法总结
Aug 28 jQuery
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
thinkphp配置连接数据库技巧
2014/12/02 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
javascript smipleChart 简单图标类
2011/01/12 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
JS如何实现动态添加的元素绑定事件
2019/11/12 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python图算法实例分析
2016/08/13 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
Python文件操作基本流程代码实例
2017/12/11 Python
Python模块搜索路径代码详解
2018/01/29 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
实习自我鉴定模板
2013/09/28 职场文书
夜大毕业自我鉴定
2013/10/11 职场文书
战友聚会主持词
2014/04/02 职场文书
机关保密承诺书
2014/06/03 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang