JavaScript深拷貝和淺拷貝概念與用法實例分析
本文實例講述了JavaScript深拷貝和淺拷貝概念與用法。分享給大家供大家參考,具體如下:
js中的淺拷貝和深拷貝,只是針對復(fù)雜數(shù)據(jù)類型(Objcet,Array)的復(fù)制問題。簡單來講淺拷貝和深拷貝都可以實現(xiàn)在原有對象的基礎(chǔ)上再生成一份的作用。但是根據(jù)新生成的對象能否影響到原對象可以分為淺拷貝和深拷貝。
概念1:淺拷貝
淺拷貝就是指拷貝引用,新生成的引用和原來的引用都是指向同一個對象的實例,彼此之間的操作會相互影響。
概念2:深拷貝
在堆中重新開辟內(nèi)存,把原引用對應(yīng)的對象實例中所有的內(nèi)容進行拷貝,因此保證了深拷貝的對象和原來的對象是完全隔離的,他們之間相互沒有影響。
概念3:數(shù)組深拷貝的實現(xiàn)
1. 使用for
循環(huán)
<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
循環(huán)
<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來實現(xiàn)
<script type="text/javascript"> var obj = { name: 'FungLeo', sex: 'man', old: '18' } var obj2=JSON.parse(JSON.stringif(obj)); obj2["name"]="kka"; </script>
總結(jié):以上就是實現(xiàn)數(shù)組和對象深拷貝的一些常用方法,可以結(jié)合具體的情形使用適合的方法。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript中json操作技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
- Javascript 淺拷貝、深拷貝的實現(xiàn)代碼
- JavaScript數(shù)組深拷貝和淺拷貝的兩種方法
- 淺談JavaScript中面向?qū)ο蟮牡纳羁截惡蜏\拷貝
- js對象淺拷貝和深拷貝詳解
- javascript對淺拷貝和深拷貝的詳解
- javascript深拷貝和淺拷貝詳解
- 淺析javaScript中的淺拷貝和深拷貝
- JavaScript基礎(chǔ)心法 深淺拷貝(淺拷貝和深拷貝)
- javascript深拷貝、淺拷貝和循環(huán)引用深入理解
- JavaScript實現(xiàn)淺拷貝與深拷貝的方法分析
- JS淺拷貝和深拷貝原理與實現(xiàn)方法分析
- JS中實現(xiàn)淺拷貝和深拷貝的代碼詳解
- javascript二維數(shù)組和對象的深拷貝與淺拷貝實例分析
- javascript 關(guān)于賦值、淺拷貝、深拷貝的個人理解
- JS賦值、淺拷貝和深拷貝(數(shù)組和對象的深淺拷貝)實例詳解
- 詳解JS深拷貝與淺拷貝
- JS對象復(fù)制(深拷貝和淺拷貝)
- js深拷貝與淺拷貝一文徹底搞懂
相關(guān)文章
layui實現(xiàn)左側(cè)菜單點擊右側(cè)內(nèi)容區(qū)顯示
這篇文章主要為大家詳細介紹了layui實現(xiàn)左側(cè)菜單點擊右側(cè)內(nèi)容區(qū)顯示,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07BootStrap中Datepicker控件帶中文的js文件
bootstrap-datepicker 是一個非常優(yōu)秀的時間選擇插件。這篇文章主要介紹了bootstrap-datepicker帶中文的js文件的相關(guān)資料,需要的朋友可以參考下2016-08-08在Javascript中為String對象添加trim,ltrim,rtrim方法
利用Javascript中每個對象(Object)的prototype屬性我們可以為Javascript中的內(nèi)置對象添加我們自己的方法和屬性。2006-09-09JavaScript箭頭函數(shù)_動力節(jié)點Java學(xué)院整理
這篇文章主要為大家詳細介紹了JavaScript箭頭函數(shù)的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06bootstrap為水平排列的表單和內(nèi)聯(lián)表單設(shè)置可選的圖標
為水平排列的表單和內(nèi)聯(lián)表單設(shè)置可選的圖標。本文通過示例代碼給大家講解,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-02-02