javascript深拷贝
来源:互联网 发布:11年总决赛数据 编辑:程序博客网 时间:2024/05/21 17:46
javascript的浅拷贝和深拷贝是老生长谈的问题了。浅拷贝是内存引用,修改一个会引起另一个跟着改变,当然只对object类型生效。今天看到一个深拷贝的方法:
var cloneObj = function(obj){ var str, newobj = obj.constructor === Array ? [] : {}; if(typeof obj !== 'object'){ return; } else if(window.JSON){ str = JSON.stringify(obj), //系列化对象 newobj = JSON.parse(str); //还原 } else { for(var i in obj){ newobj[i] = typeof obj[i] === 'object' ? cloneObj(obj[i]) : obj[i]; } } return newobj;};深拷贝一般有两种方式:一种是新建一个对象,然后循环赋予属性和值,另外一种呢,利用JSON的stringify和parse方法实现。
迭代一个object的属性值,可以用for in 循环,更好的方法是用Object.keys()方法。Object.keys方法返回一个对象可枚举的属性名的数组。它与for in循环的不同之处在于,for in会把_proto_里的属性名也迭代进去。所以,for in循环里包含了hasOwnProperty为false的属性名。来看个例子
var Obj = function(){ this.a=1;}Obj.prototype.b=2;var newObj = new Obj();console.log(Object.keys(newObj)); //['a']for(var i in newObj){ console.log(i); // a,b if (newObj.hasOwnProperty(i)){ console.log(i); // a }}另个附一个各种深拷贝的性能测试地址:https://jsperf.com/deep-copy-vs-json-stringify-json-parse/5#
0 0
- JavaScript 深拷贝 & 浅拷贝
- Javascript对象深拷贝
- javascript深拷贝
- javascript 深拷贝
- Javascript深拷贝对象
- javascript深拷贝
- javascript对象深拷贝。
- JavaScript 实现深拷贝
- javascript对象深拷贝
- JavaScript深拷贝
- JavaScript的深拷贝
- Javascript浅拷贝与深拷贝实现
- Javascript浅拷贝与深拷贝实现
- javascript中的深拷贝和浅拷贝
- javascript 深拷贝和浅拷贝
- JavaScript的深拷贝与浅拷贝
- JavaScript深拷贝和浅拷贝
- JavaScript深拷贝和浅拷贝
- Vim配置#Vim中使用鼠标功能
- error while loading shared libraries: xxx.so.x" 错误的原因和解决办法
- sqlserver数据库使用空间监控
- Spring boot 进阶之路
- SAP ABAP图标查找的方法
- javascript深拷贝
- java 连接MySQL数据库的步骤与代码测试连通
- 三、类和对象~-类的合理设计
- HttpURLConnection替代apache httpclient上传文件
- 实现一个简单的Spring实例
- 阿里巴巴Java开发手册
- 高一致性分布式数据库系统之实现
- 【sublime】sublime的使用教程
- Python线、四边形、三角形画法