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库还是自己写代码?
Jan 28 Javascript
关于hashchangebroker和statehashable的补充文档
Aug 08 Javascript
JavaScript检测并限制复选框选中个数的方法
Aug 12 Javascript
JS仿淘宝实现的简单滑动门效果代码
Oct 14 Javascript
浅谈Vue.js中的v-on(事件处理)
Sep 05 Javascript
JS非行间样式获取函数的实例代码
Jun 05 Javascript
浅谈super-vuex使用体验
Jun 25 Javascript
在vue中安装使用vux的教程详解
Sep 16 Javascript
微信小程序页面间传值与页面取值操作实例分析
Apr 30 Javascript
Vue+Express实现登录注销功能的实例代码
May 05 Javascript
使用JavaScript实现贪吃蛇游戏
Sep 29 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
Mar 02 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
编译问题
2006/10/09 PHP
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
PHP中使用memcache存储session的三种配置方法
2014/04/05 PHP
yii的CURD操作实例详解
2014/12/04 PHP
php阳历转农历优化版
2016/08/08 PHP
Laravel 的数据库迁移的方法
2017/07/31 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
js中更短的 Array 类型转换
2011/10/30 Javascript
jQuery中操控hidden、disable等无值属性的方法
2014/01/06 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
JQuery中clone方法复制节点
2015/05/18 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
jQuery实现默认是闭合的FAQ展开效果菜单
2015/09/14 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
分析在Python中何种情况下需要使用断言
2015/04/01 Python
Python递归遍历列表及输出的实现方法
2015/05/19 Python
在Apache服务器上同时运行多个Django程序的方法
2015/07/22 Python
11个Python3字典内置方法大全与示例汇总
2019/05/13 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
python 代码运行时间获取方式详解
2020/09/18 Python
python中uuid模块实例浅析
2020/12/29 Python
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
Room Mate Hotels美国:西班牙酒店品牌
2018/04/10 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
联想智利官方网站:Lenovo Chile
2020/06/03 全球购物
高中考试作弊检讨书
2014/01/14 职场文书
酒店个人求职信范文
2014/01/25 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
《童年的发现》教学反思
2016/02/18 职场文书
解决ObjectMapper.convertValue() 遇到的一些问题
2021/06/30 Java/Android
SpringCloud超详细讲解Feign声明式服务调用
2022/06/21 Java/Android