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脚本类
Aug 27 Javascript
js点击页面其它地方将某个显示的DIV隐藏
Jul 12 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
Dec 05 Javascript
JavaScript中两个字符串的匹配
Jun 08 Javascript
Vue.js计算属性computed与watch(5)
Dec 09 Javascript
详解VueJs前后端分离跨域问题
May 24 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
Sep 11 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
Jan 21 Javascript
js实现网页同时进行多个倒计时功能
Feb 25 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
Apr 16 Javascript
使用 Vue 实现一个虚拟列表的方法
Aug 20 Javascript
JS实现拖拽元素时与另一元素碰撞检测
Aug 27 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
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
php 伪造本地文件包含漏洞的代码
2011/11/03 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
解析php中获取url与物理路径的总结
2013/06/21 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
PHP数组常用函数实例小结
2018/08/20 PHP
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
JavaScript和CSS交互的方法汇总
2014/12/02 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
jQuery实现的老虎机跑动效果示例
2018/12/29 jQuery
vue实现列表滚动的过渡动画
2020/06/29 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
python opencv人脸检测提取及保存方法
2018/08/03 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
tensorflow如何批量读取图片
2019/08/29 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
Python遍历字典方式就实例详解
2019/12/28 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
端口镜像是怎么实现的
2014/03/25 面试题
纪念九一八事变演讲稿:牢记九一八,屈辱怎能忘
2014/09/14 职场文书
不尊敬老师检讨书范文
2014/11/19 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书
python not运算符的实例用法
2021/06/30 Python