js 浅拷贝与深拷贝
来源:互联网 发布:蘑菇软件是什么 编辑:程序博客网 时间:2024/05/24 06:02
js可以把变量分成基本类型和引用类型两种,基本类型number,string,boolean,null,undefined五种,而除了这五种基本类型,其他都为引用类型。
js的基本类型的值是保存在栈内存中,引用类型是使用栈内存保存地址,堆内存保存对象的值,而=赋值操作符是对栈内存进行操作的。所以复制引用类型时就需要使用到浅拷贝和深拷贝
(基本类型与引用类型的详细文章)
浅复制与深复制的区别
- 浅复制只复制一层对象的属性,而深复制递归复制了所有层级
(hasOwnProperty 检测是否是有自定义属性,可以理解为只复制自定义属性,constructor 返回对象的引用)
浅复制
var obj={ a:1, arr:[2,3]}var shadowObj=shadowCopy(obj);function shadowCopy(obj){ if(typeof obj !=="object")return; var newObj; //保留obj的constructor属性 if(obj.constructor===Array){ newObj=[]; }else{ newObj={}; newObj.constructor=obj.constructor; } var dst=[] for(var prop in obj){ if(obj.hasOwnProperty(prop)){ dst[prop]=obj[prop] } } return dst;}
深复制
var obj={ a:1, b:[2,3]}function deepCopy(obj){ var str,newObj=obj.constructor===Array?[]:{}; if(typeof obj !=="object"){ return; }else if(window.JSON){ //如果支持json,则直接将对象序列化,再进行转化为json对象,就可以进行复制 str=JSON.stringify(obj); newObj=JSON.parse(str); }else{ for(var prop in obj){ newObj[prop]=typeof obj[prop]==="object"?deepCopy(obj[prop]):obj[prop]; } } return newObj;}
0 0
- js 深拷贝与浅拷贝Demo
- js 浅拷贝与深拷贝
- JS深拷贝与浅拷贝
- js对象浅拷贝与深拷贝
- Js中的深拷贝与浅拷贝
- JS的深拷贝与浅拷贝
- js深拷贝与浅拷贝
- js深拷贝与浅拷贝
- js 浅拷贝 深拷贝
- js浅拷贝、深拷贝
- js-浅拷贝,深拷贝
- js深拷贝浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 524. Longest Word in Dictionary through Deleting
- 射随器负半周削波问题
- spring配置datasource的4种方式
- 遇到一个很有趣的问题,while(ture)或者for循环出现异常,继续执行还是跳出异常
- 在Ubuntu上创建Git仓库并上传到GitHub
- js 浅拷贝与深拷贝
- Spring中bean的init和destroy方法讲解
- request.getCharacterEncoding() 的返回值为什么会是null
- MapReduce-------------Win7下使用Eclipse玩转Linux端的MapReduce
- 【iOS界面开发】iOS事件派发机制
- C3P0连接池配置
- MyBatis使用总结和整合Spring
- 1小时搭建个人网站:购买虚拟主机,购买域名,绑定IP和申请SSL证书实现https
- SNNU2017校赛(部分)题解