欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript深拷貝的幾種情況總結(jié)

 更新時間:2022年01月12日 15:58:13   作者:Merde!  
這篇文章主要為大家介紹了javascript深拷貝的幾種情況,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

在前端項目的數(shù)據(jù)處理中,json數(shù)據(jù)的拷貝是很常見的,怎么使拷貝的雙方數(shù)據(jù)之間互不影響,這就要用到深拷貝了

深拷貝:引用數(shù)據(jù)類型中名存在棧內(nèi)存中,值存在于堆內(nèi)存中,但是棧內(nèi)存會提供一個引用的地址指向堆內(nèi)存中的值,深拷貝就是增加了一個指針并且申請了一個新的內(nèi)存,使這個增加的指針指向這個新的內(nèi)存。方法一:使用Object.assign(),一般用于數(shù)據(jù)類型比較簡單,層數(shù)不大于1的數(shù)據(jù);因為Object.assign無法深層拷貝。

const strJson = {
      id:'12343231',
      name:'張三',
      age:23,
      inof:{
        sex:'男'
      },
      sjid:null,
      strHandle () {
        console.log('111111111');
      }
    }
    obj.name = 'lisi'
    obj.inof.sex = '女'
    console.log('obj',obj);
    console.log('strJson',strJson);   

結(jié)果:

在這里插入圖片描述

方法二:使用JSON.parse和JSON.stringify,一般用于數(shù)據(jù)類型比較復雜的,有深層嵌套的數(shù)據(jù);但是undefined , function, RegExp 等類型無法處理;

const strJson = {
      id:'12343231',
      name:'張三',
      age:23,
      inof:{
        sex:'男'
      },
      sjid:null,
      strHandle () {
        console.log('111111111');
      }
    }
    const obj = JSON.parse(JSON.stringify(strJson))
    obj.name = 'lisi'
    obj.inof.sex = '女'
    console.log('obj',obj);
    console.log('strJson',strJson);

結(jié)果:

在這里插入圖片描述

第三種:使用遞歸拷貝,在代碼中處理特殊的情況。

 function copyHandle (strJson) {
      let result ;
      // 判斷是否存在
      if (!strJson) return null;
      // 判斷是否是對象
      if (typeof strJson !== 'object') return strJson;
      // 判斷是否是數(shù)組
      if (Array.isArray(strJson)) {
        result = [];
        for (let i of strJson) {
          result.push(copyHandle(i))
        }
      }//判斷是否是RegExp
      else if(strJson.constructor===RegExp) {
        result = strJson
      }//判斷是否是對象
      else {
        result = {}
        for (let i in  strJson) {
          result[i] = copyHandle(strJson[i])
        }
      }
      // 返回結(jié)果
      return result
    }

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • javascript 內(nèi)置對象及常見API詳細介紹

    javascript 內(nèi)置對象及常見API詳細介紹

    這篇文章主要介紹了javascript 內(nèi)置對象及常見API的相關(guān)資料,這里對內(nèi)置對象進行了詳細的整理,需要的朋友可以參考下
    2016-11-11
  • javascript基礎知識大集錦(一) 推薦收藏

    javascript基礎知識大集錦(一) 推薦收藏

    主要知識點:js數(shù)組,數(shù)字函數(shù),字符串函數(shù),表單驗證,hashMap,堆棧,日期函數(shù),call函數(shù) 等。
    2011-01-01
  • 張孝祥JavaScript學習階段性總結(jié)(2)--(X)HTML學習

    張孝祥JavaScript學習階段性總結(jié)(2)--(X)HTML學習

    張孝祥JavaScript學習階段性總結(jié)(2)--(X)HTML學習...
    2007-02-02
  • JavaScript—window對象使用示例

    JavaScript—window對象使用示例

    window對象是JavaScript瀏覽器對象模型中的頂層對象,其包含多個常用方法和屬性,下面為大家介紹下window對象的使用
    2013-12-12
  • Firefox window.close()的使用注意事項

    Firefox window.close()的使用注意事項

    window.close()在IE下可以執(zhí)行關(guān)閉,但在Firefox下不關(guān)閉,不是JS代碼window.close()的問題,而是Firefox的配置問題
    2009-04-04
  • 詳解JavaScript對W3C DOM模版的支持情況

    詳解JavaScript對W3C DOM模版的支持情況

    這篇文章主要介紹了詳解JavaScript對W3C DOM模版的支持情況,在JS前端編程的兼容性方面可作參考使用,需要的朋友可以參考下
    2015-06-06
  • 最新評論