最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript深拷貝的原理與實現(xiàn)方法分析

 更新時間:2017年04月10日 11:21:39   作者:布瑞澤的童話  
這篇文章主要介紹了javascript深拷貝的原理與實現(xiàn)方法,簡單分析了值傳遞和引用傳遞的原理與實現(xiàn)方法,并結(jié)合實例形式給出了深拷貝的具體實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了javascript深拷貝的原理與實現(xiàn)方法。分享給大家供大家參考,具體如下:

要講JavaScript的拷貝,就得先講講javascript中的值傳遞引用傳遞。

javascript中沒有一個具體的語法來規(guī)定哪些參數(shù)是引用傳遞,而其他語言中都有明文規(guī)定,比如 C# 中的 ref 和 PHP 中的 & 。

這也是javascript眾多弊端中的一個。

我們先看看下面這段代碼:

//值傳遞
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

說明,javascript中只有簡單類型是值傳遞,而其他復(fù)雜類型比如數(shù)組、對象都是默認就是引用傳遞的。

那么我們?nèi)绻枰獜?fù)制一個對象呢?就必須自己定義方法:

//深度拷貝函數(shù),其實就是值傳遞
function cloneObject(srcobj){
  var tarobj=new Object();
  for(var key in srcobj){//判斷對象中是否繼續(xù)為對象
    tarobj[key]=typeof srcobj[key]==='object'?cloneObject(srcobj[key]):srcobj[key];
  }
  return tarobj;
}
//驗證深度拷貝函數(shù)的使用
// 測試用例:
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,說明普通的=是一種引用傳遞
console.log(tarObj.a);   // 1
console.log(tarObj.b.b1[0]);  // "hello",說明我們定義的深拷貝是值傳遞

其實就是通過實例化一個新的對象,從而在堆中開辟一塊新的內(nèi)存空間,使得棧中的變量名指向堆中的新內(nèi)容。

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript中json操作技巧總結(jié)》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript動畫特效與技巧匯總》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)

希望本文所述對大家JavaScript程序設(shè)計有所幫助。

相關(guān)文章

  • js使用Array.prototype.sort()對數(shù)組對象排序的方法

    js使用Array.prototype.sort()對數(shù)組對象排序的方法

    這篇文章主要介紹了js使用Array.prototype.sort()對數(shù)組對象排序的方法,實例分析了Array.prototype.sort()的原理與相關(guān)的使用技巧,需要的朋友可以參考下
    2015-01-01
  • input框中的name和id的區(qū)別

    input框中的name和id的區(qū)別

    這篇文章主要介紹了input框中的name和id的區(qū)別介紹,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • 跟我學(xué)習(xí)javascript的垃圾回收機制與內(nèi)存管理

    跟我學(xué)習(xí)javascript的垃圾回收機制與內(nèi)存管理

    跟我學(xué)習(xí)javascript的垃圾回收機制與內(nèi)存管理,感興趣的小伙伴們可以參考一下
    2015-11-11
  • js實現(xiàn)選項卡效果

    js實現(xiàn)選項卡效果

    這篇文章主要為大家詳細介紹了js實現(xiàn)選項卡效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • js和jquery使按鈕失效為不可用狀態(tài)的方法

    js和jquery使按鈕失效為不可用狀態(tài)的方法

    js和jquery如何使按鈕失效,很簡單,只要設(shè)置disabled屬性為true即為不可用狀態(tài)即可,下面有個簡單的示例,大家可以參考下
    2014-01-01
  • JS前端開發(fā)之exec()和match()的對比使用

    JS前端開發(fā)之exec()和match()的對比使用

    match()方法可在字符串內(nèi)檢索指定的值,或找到一個或多個正則表達式的匹配,下面這篇文章主要給大家介紹了關(guān)于JS前端開發(fā)之exec()和match()的對比使用的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • JS實現(xiàn)字符串翻轉(zhuǎn)的方法分析

    JS實現(xiàn)字符串翻轉(zhuǎn)的方法分析

    這篇文章主要介紹了JS實現(xiàn)字符串翻轉(zhuǎn)的方法,結(jié)合實例形式分析了javascript字符串使用reverse方法、字符串遍歷方法以及針對輸入字符串的遍歷、逆序輸出等方法實現(xiàn)字符串反轉(zhuǎn)相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • JavaScript判斷變量數(shù)據(jù)類型的常見方法小結(jié)

    JavaScript判斷變量數(shù)據(jù)類型的常見方法小結(jié)

    在JavaScript開發(fā)中,了解和判斷變量的數(shù)據(jù)類型是編寫健壯代碼的基礎(chǔ),變量的類型可以在運行時改變,這為開發(fā)者帶來了靈活性的同時也增加了復(fù)雜性,本文將深入探討幾種常見的判斷變量類型的技巧,并結(jié)合實際案例進行分析,需要的朋友可以參考下
    2024-12-12
  • js實現(xiàn)簡單鎖屏功能實例

    js實現(xiàn)簡單鎖屏功能實例

    這篇文章主要介紹了js實現(xiàn)簡單鎖屏功能的方法,實例分析了javascript操作頁面元素顯示與隱藏的相關(guān)技巧,涉及javascript操作元素屬性與鼠標(biāo)、鍵盤事件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • 如何基于原生javaScript生成帶圖片的二維碼

    如何基于原生javaScript生成帶圖片的二維碼

    這篇文章主要介紹了如何基于原生javaScript生成帶圖片的二維碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11

最新評論

松原市| 临沂市| 霍林郭勒市| 黄山市| 天镇县| 永修县| 合肥市| 兴城市| 沭阳县| 新蔡县| 太康县| 涡阳县| 金阳县| 视频| 威信县| 武定县| 泽普县| 大兴区| 乐安县| 南雄市| 湖北省| 波密县| 黔西| 保亭| 龙里县| 麻江县| 波密县| 峡江县| 夏邑县| 杭州市| 永新县| 怀化市| 长兴县| 长子县| 柳林县| 成安县| 南宁市| 繁昌县| 太原市| 丹寨县| 巴林右旗|