解析js中的深拷贝和浅拷贝
来源:互联网 发布:抱枕淘宝店推荐 编辑:程序博客网 时间:2024/06/05 14:30
js中的浅拷贝和深拷贝,只是针对复杂数据类型(Objcet,Array)的复制问题。简单来讲浅拷贝和深拷贝都可以实现在原有对象的基础上再生成一份的作用。但是根据新生成的对象能否影响到原对象可以分为浅拷贝和深拷贝。
概念1:浅拷贝
浅拷贝就是指拷贝引用,新生成的引用和原来的引用都是指向同一个对象的实例,彼此之间的操作会相互影响。
概念2:深拷贝
在堆中重新开辟内存,把原引用对应的对象实例中所有的内容进行拷贝,因此保证了深拷贝的对象和原来的对象是完全隔离的,他们之间相互没有影响。
概念3:数组深拷贝的实现
1.使用for循环
<script type="text/javascript"> var arr1=['a','b','c']; var arr2=[]; function deepCopy(arr1,arr2){ for(var i=0;i<arr1.length;i++){ arr2[i]=arr1[i]; } } deepCopy(arr1,arr2); arr2[1]='d'; console.log(arr1);//['a','b','c'] console.log(arr2);//['a','d','c'] </script>2.使用slice()方法
<script type="text/javascript"> var arr1=['a','b','c']; var arr2=arr1.slice(0); arr2[1]='d'; console.log(arr1);//['a','b','c'] console.log(arr2);//['a','d','c'] </script>
3.使用concat方法
<script type="text/javascript"> var arr1=['a','b','c']; var arr2=arr1.concat(); arr2[1]='d'; console.log(arr1);//['a','b','c'] console.log(arr2);//['a','d','c'] </script>
概念4:对象的深拷贝
1.使用for循环
<script type="text/javascript"> var obj = { name: 'FungLeo', sex: 'man', old: '18'}function copyObj(obj) { let res = {} for (var key in obj) { res[key] = obj[key] } return res}var obj2 = copyObj(obj);obj2["name"]="kka"; </script>
2.借助JSON来实现
<script type="text/javascript"> var obj = { name: 'FungLeo', sex: 'man', old: '18'}var obj2=JSON.parse(JSON.stringif(obj));obj2["name"]="kka"; </script>
总结:以上就是实现数组和对象深拷贝的一些常用方法,可以结合具体的情形使用适合的方法。
阅读全文
0 0
- 解析js中的深拷贝和浅拷贝
- js中的浅拷贝和深拷贝
- js中的深拷贝和浅拷贝
- [clone]Java中的深拷贝和浅拷贝 实例解析
- 深入解析Java中的深拷贝和浅拷贝
- 浅谈js中的浅拷贝和深拷贝
- Js中的深拷贝与浅拷贝
- 【C++】深拷贝和浅拷贝解析
- iOS深拷贝和浅拷贝解析
- 深入解析深拷贝和浅拷贝
- js深拷贝和浅拷贝
- js深拷贝和浅拷贝
- js深拷贝和浅拷贝
- js深拷贝和浅拷贝
- js深拷贝和浅拷贝
- Js实现深拷贝和浅拷贝
- js深拷贝和浅拷贝
- JS浅拷贝和深拷贝
- 【解决方案】jquery mobile 页面事件多次重复跳转
- 面试归来——梳理社招面试以及浅述对程序员职业生涯的看法
- Java 流
- Perl_获得字符串长度_length($var)
- 数据结构及算法知识(一)
- 解析js中的深拷贝和浅拷贝
- 集合 详解
- overlaps the location of another project Zendstudio导入已经存在的目录
- 奥术大师多撒多撒
- GC
- C++ map用法详解
- 对文章单词的字母个数的计算
- 注册博客第一天
- TCP/IP详解学习笔记(2)-数据链路层