十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
今天小編給大家分享一下javascript深拷貝是什么及怎么用的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)推出元江縣免費(fèi)做網(wǎng)站回饋大家。
要講JavaScript的拷貝,就得先講講javascript中的值傳遞和引用傳遞。
javascript中沒(méi)有一個(gè)具體的語(yǔ)法來(lái)規(guī)定哪些參數(shù)是引用傳遞,而其他語(yǔ)言中都有明文規(guī)定,比如 C# 中的 ref 和 PHP 中的 & 。
這也是javascript眾多弊端中的一個(gè)。
我們先看看下面這段代碼:
//值傳遞 var i = 3; var j = i; j = 4; document.write(i);//3 //引用傳遞 var m = [1]; var n = m; n[0] = 2; document.write(n[0]);//2
說(shuō)明,javascript中只有簡(jiǎn)單類型是值傳遞,而其他復(fù)雜類型比如數(shù)組、對(duì)象都是默認(rèn)就是引用傳遞的。
那么我們?nèi)绻枰獜?fù)制一個(gè)對(duì)象呢?就必須自己定義方法:
//深度拷貝函數(shù),其實(shí)就是值傳遞
function cloneObject(srcobj){
var tarobj=new Object();
for(var key in srcobj){//判斷對(duì)象中是否繼續(xù)為對(duì)象
tarobj[key]=typeof srcobj[key]==='object'?cloneObject(srcobj[key]):srcobj[key];
}
return tarobj;
}
//驗(yàn)證深度拷貝函數(shù)的使用
// 測(cè)試用例:
var srcObj = {
a: 1,
b: {
b1: ["hello", "hi"],
b2: "JavaScript"
}
};
var abObj = srcObj;//引用傳遞
var tarObj = cloneObject(srcObj);
srcObj.a = 2;
srcObj.b.b1[0] = "Hello";
console.log(abObj.a);//2
console.log(abObj.b.b1[0]);//Hello,說(shuō)明普通的=是一種引用傳遞
console.log(tarObj.a); // 1
console.log(tarObj.b.b1[0]); // "hello",說(shuō)明我們定義的深拷貝是值傳遞其實(shí)就是通過(guò)實(shí)例化一個(gè)新的對(duì)象,從而在堆中開(kāi)辟一塊新的內(nèi)存空間,使得棧中的變量名指向堆中的新內(nèi)容。
以上就是“javascript深拷貝是什么及怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。