JavaScript深拷貝和淺拷貝概念與用法實(shí)例分析
本文實(shí)例講述了JavaScript深拷貝和淺拷貝概念與用法。分享給大家供大家參考,具體如下:
js中的淺拷貝和深拷貝,只是針對(duì)復(fù)雜數(shù)據(jù)類型(Objcet,Array)的復(fù)制問題。簡(jiǎn)單來(lái)講淺拷貝和深拷貝都可以實(shí)現(xiàn)在原有對(duì)象的基礎(chǔ)上再生成一份的作用。但是根據(jù)新生成的對(duì)象能否影響到原對(duì)象可以分為淺拷貝和深拷貝。
概念1:淺拷貝
淺拷貝就是指拷貝引用,新生成的引用和原來(lái)的引用都是指向同一個(gè)對(duì)象的實(shí)例,彼此之間的操作會(huì)相互影響。
概念2:深拷貝
在堆中重新開辟內(nèi)存,把原引用對(duì)應(yīng)的對(duì)象實(shí)例中所有的內(nèi)容進(jìn)行拷貝,因此保證了深拷貝的對(duì)象和原來(lái)的對(duì)象是完全隔離的,他們之間相互沒有影響。
概念3:數(shù)組深拷貝的實(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:對(duì)象的深拷貝
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來(lái)實(shí)現(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é):以上就是實(shí)現(xiàn)數(shù)組和對(duì)象深拷貝的一些常用方法,可以結(jié)合具體的情形使用適合的方法。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript中json操作技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- Javascript 淺拷貝、深拷貝的實(shí)現(xiàn)代碼
- JavaScript數(shù)組深拷貝和淺拷貝的兩種方法
- 淺談JavaScript中面向?qū)ο蟮牡纳羁截惡蜏\拷貝
- js對(duì)象淺拷貝和深拷貝詳解
- javascript對(duì)淺拷貝和深拷貝的詳解
- javascript深拷貝和淺拷貝詳解
- 淺析javaScript中的淺拷貝和深拷貝
- JavaScript基礎(chǔ)心法 深淺拷貝(淺拷貝和深拷貝)
- javascript深拷貝、淺拷貝和循環(huán)引用深入理解
- JavaScript實(shí)現(xiàn)淺拷貝與深拷貝的方法分析
- JS淺拷貝和深拷貝原理與實(shí)現(xiàn)方法分析
- JS中實(shí)現(xiàn)淺拷貝和深拷貝的代碼詳解
- javascript二維數(shù)組和對(duì)象的深拷貝與淺拷貝實(shí)例分析
- javascript 關(guān)于賦值、淺拷貝、深拷貝的個(gè)人理解
- JS賦值、淺拷貝和深拷貝(數(shù)組和對(duì)象的深淺拷貝)實(shí)例詳解
- 詳解JS深拷貝與淺拷貝
- JS對(duì)象復(fù)制(深拷貝和淺拷貝)
- js深拷貝與淺拷貝一文徹底搞懂
相關(guān)文章
通過(guò)實(shí)例解析js可枚舉屬性與不可枚舉屬性
這篇文章主要介紹了通過(guò)實(shí)例解析js可枚舉屬性與不可枚舉屬性,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
一個(gè)對(duì)于Array的簡(jiǎn)單擴(kuò)展
一個(gè)對(duì)于Array的簡(jiǎn)單擴(kuò)展...2006-10-10
chrome瀏覽器不支持onmouseleave事件的解決技巧
發(fā)現(xiàn)給div加的 onmouseleave事件在chrome 中不起效果,下面與大家分享下具體的解決方法,不會(huì)的朋友可以了解下哈,希望對(duì)大家有所幫助2013-05-05
element-ui 時(shí)間選擇器限制范圍的實(shí)現(xiàn)(隨動(dòng))
這篇文章主要介紹了element-ui 時(shí)間選擇器限制范圍(隨動(dòng)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Javascript驗(yàn)證Visa和MasterCard信用卡號(hào)的方法
這篇文章主要介紹了Javascript驗(yàn)證Visa和MasterCard信用卡號(hào)的方法,涉及javascript正則驗(yàn)證的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
Axios設(shè)置token請(qǐng)求頭的三種方式
用戶登錄時(shí),后端會(huì)返回一個(gè)token,并且保存到瀏覽器的localstorage中,可以根據(jù)localstorage中的token判斷用戶是否登錄,所以當(dāng)發(fā)送請(qǐng)求時(shí),都要攜帶token給后端進(jìn)行判斷,本文給大家介紹了Axios設(shè)置token請(qǐng)求頭的三種方式,需要的朋友可以參考下2024-02-02
JS多個(gè)表單數(shù)據(jù)提交下的serialize()應(yīng)用實(shí)例分析
這篇文章主要介紹了JS多個(gè)表單數(shù)據(jù)提交下的serialize()應(yīng)用,接合實(shí)例形式分析了原生javascript實(shí)現(xiàn)多個(gè)表單提交時(shí)serialize操作相關(guān)使用技巧與操作注意事項(xiàng),需要的朋友可以參考下2019-08-08
js DNA動(dòng)態(tài)序列比對(duì)代碼
JavaScript動(dòng)態(tài)序列比對(duì)代碼,隨便 寫著玩的,在網(wǎng)上見到用VC、VB寫的比較多,這個(gè)算法以前在高中課本上見到過(guò),我只是用Js寫一下試試,或許還不是太準(zhǔn)確。2010-07-07

