本文实例讲述了JavaScript实现浅拷贝与深拷贝的方法。分享给大家供大家参考,具体如下:
平时使用数组复制时,我们大多数会使用“=?这只是浅拷贝,存在很多问题。比如
让arr=[1、2、3、4、5); 让arr2=arr; console.log (arr)//[1、2、3、4、5) console.log (arr2)//[1、2、3、4、5) arr [0]=6; console.log (arr)//[6、2、3、4、5) console.log (arr2)//[6、2、3、4、5) arr2 [4]=7; console.log (arr)//[6, 2、3、4、7] console.log (arr2)//[6, 2、3、4、7] >之前很明显,浅拷贝下,拷贝和被拷贝的数组会相互受到影响。所以,必须要有一种不受影响的方法,那就是深拷贝。
深拷贝的实现方式有很多种。
<强>一,循环实现深拷贝强>
//循环副本 函数副本(arr) { 让卡尔=[] (让我=0;我& lt;arr.length;我+ +){ cArr.push (arr[我]) } 返回卡尔; } 让arr3=(1、2、3、4); 让arr4=复制(arr3)//(1、2、3、4) console.log (arr4)//(1、2、3、4) arr3 [0]=5; console.log (arr3)//(5, 2、3、4) console.log (arr4)//(1、2、3、4) >之前<强>二,片方法实现深拷贝强>
//片实现深拷贝 让arr5=(1、2、3、4); 让arr6=arr5.slice (0); arr5 [0]=5; console.log (arr5);//(5,2、3、4) console.log (arr6);//(1、2、3、4) >之前<强>三,concat实现深拷贝强>
//concat实现深拷贝 让arr7=(1、2、3、4); 让arr8=arr7.concat (); arr7 [0]=5; console.log (arr7);//(5,2、3、4) console.log (arr8);//(1、2、3、4) >之前<强>四,es6扩展运算实现深拷贝强>
//es6扩展运算实现深拷贝 让arr9=(1、2、3、4); 让[…arr10]=arr9; arr9 [0]=5; console.log (arr9)//(5, 2、3、4) console.log (arr10)//(1、2、3、4) >之前<强>五,对象的循环深拷贝强>
//循环副本对象 让obj={ id:“0”, 名称:“王”, 性:“男人” } 让methoda=copy2 (obj) 函数copy2 (obj) { 让cObj={}; (var关键obj) { cObj[主要]=obj(例子) } 返回cObj } console.log (obj)//{id:“0”,名字:“国王”,性:“男人”} console.log methoda ()//{id:“0”,名字:“国王”,性:“男人”} >之前<强>六,对象转换成json实现深拷贝强>
//转换成json 让obj3=JSON.parse (JSON.stringify (obj)); console.log (obj3)//{id:“0”,名字:“国王”,性:“男人”} >之前<强>七,es6扩展运算实现深拷贝强>
让{…obj4}=obj console.log (obj4)//{id:“0”,名字:“国王”,性:“男人”} >之前<强>八,通用深拷贝强>
var克?function (v) { var o=v。构造函数数组===& # 63;[]:{}; 我在v (var) { o[我]=typeof v[我]==="对象" & # 63;[我]克隆(v): v(我); } 返回啊; } >之前总结:深刻理解javascript的深浅拷贝,可以灵活的运用数组,并且可以避免很多bug。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript面向对象入门教程》、《JavaScript错误与调试技巧总结》,《JavaScript数据结构与算法技巧总结》,《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
JavaScript实现浅拷贝与深拷贝的方法分析