深拷贝与浅拷贝简单实现及原理
来源:互联网 发布:ssd优化软件 编辑:程序博客网 时间:2024/06/03 16:54
代码一:
let obj1={ name:'li', skill:'web'}let o={};for(let i in obj1){ o[i]=obj1[i];}//console.log(o);o.age=20;console.log(o);console.log(obj1);
输出结果:
修改o的对象,o对象改变,obj1对象没变化。由于对象obj1的值都是原始类型,运用的浅拷贝。
修改obj1对象的skill属性为对象,完整代码如下,代码二:
let obj1={ name:'li', skill:{ listen:'Yes', write:'Yes' }}let o={};for(let i in obj1){ o[i]=obj1[i];}o.skill.talk='No';console.log(o.skill);console.log(obj1.skill);
结果:
修改o对象,obj1对象同时也修改,需要深度复制。
修改代码实现层级复制,代码三:
function deepCopy(obj1,obj2) { var obj2 = obj2 || {}; for(let i in obj1){ if(typeof obj1[i]=== 'object') { obj2[i] = Array.isArray(obj1[i])?[]:{}; deepCopy(obj1[i],obj2[i]); }else{ obj2[i]=obj1[i]; } }}let obj1={ name:'li', skill:{ listen:'Yes', write:'Yes' }}let obj2={};deepCopy(obj1,obj2);obj2.age=20;console.log(obj1);console.log(obj2);
运行结果:
修改obj2的对象,结果发现:obj2对象改变,obj1对象没变化。
结论:
● 深拷贝,其实就是值传递
● 深拷贝,通过实例化一个新的对象,从而在堆中开辟一块新的内存空间,使得栈中的变量名指向堆中的新内容
阅读全文
0 0
- 深拷贝与浅拷贝简单实现及原理
- JS深拷贝与浅拷贝及实现
- Java深拷贝与浅拷贝原理
- Javascript浅拷贝与深拷贝实现
- Javascript浅拷贝与深拷贝实现
- 深拷贝与浅拷贝的实现
- JavaScript实现深拷贝与浅拷贝
- 浅拷贝与深拷贝、以及深拷贝的实现
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- “浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- 浅拷贝与深拷贝
- 深拷贝与浅拷贝
- 深拷贝与浅拷贝
- QGC之qml学习
- hdu 6030 Happy Necklace
- 写程序的小技巧
- Linearizability 一致性验证
- 使用ZeroMQ进行分布式消息传递
- 深拷贝与浅拷贝简单实现及原理
- mac 修改文件权限为777可读可写可执行
- hdu 3555 数位DP
- ES索引写入性能优化
- 降维学习笔记(一)PCA算法
- 携程大数据实时风控的架构及实践
- Codeforces 535D
- ELK5.3+Kafka集群配置
- 转载自http://www.jianshu.com/p/77e811e1c987