• <big id="vhnbr"></big>

      最近在寫項目的時候,有個部分是判斷數組內是否存在這個日期,如果不存在的話則日期減一天或加一天再遍歷一次數組內是否存在這個日期,重復此操作直到找到日期為止。

      日期操作代碼如下

       //日期加一天或減一天
              function moreDate(date1,i) {
                  let date =new Date(date1)
                  let year = date.getFullYear();
                  //補全位數
                  let month = (date.getMonth()+1).toString().padStart(2,'0')
                  let day = (date.getDate()+i).toString().padStart(2,'0')
                  return year+"-"+month+"-"+day
              }

      但是會存在一個問題就是,由于這個操作是遞歸操作,每次找不到日期時不是跳出方法,而是再執行一次這個方法,當重復多次這個遞歸操作時就會導致達到調用堆棧限制,就會有Maximum call stack size exceeded錯誤,這個錯誤的意思是 "超出最大調用堆棧大小"。

      js報錯:Maximum?call?stack?size?exceeded的解決方法

      發生這種錯誤大多都是語句判斷沒有寫對,或者忘了寫判斷語句導致遞歸操作無限重復下去。

      這里建議是在谷歌瀏覽器中f12對js文件中報錯的位置打斷點,一步步看究竟是哪的條件語句出錯了。

      在這里日期到10月01日的時候,進行日期減一操作時,日變成00了

      js報錯:Maximum?call?stack?size?exceeded的解決方法

      再下一步操作時,日期2022-10-00就是一個錯誤日期了,然后就導致遞歸操作的判斷條件一直錯誤,導致無限遞歸出現Maximum call stack size exceeded錯誤

      js報錯:Maximum?call?stack?size?exceeded的解決方法

      ?所以我們在這對日期加減方法進行改良,先對日期進行操作再獲取年月日的數據。

             //日期加一天或減一天
              function moreDate(date1,i) {
                  let date =new Date(date1)
                   date.setDate(date.getDate()+i) //先對日期進行加減操作再將日期set回去
                  let year = date.getFullYear();
                  //補全位數
                  let month = (date.getMonth() + 1).toString().padStart(2, '0')
                  let day = (date.getDate()).toString().padStart(2, '0')
                  return year+"-"+month+"-"+day
              }

      再執行方法,10月01日減一天就變成了9月30日了,接著順利執行遞歸操作。

      js報錯:Maximum?call?stack?size?exceeded的解決方法

      總結

      原文地址:https://blog.csdn.net/ttter_/article/details/127188137

      相關文章:

      国产免费三A级精品大片|久久久久久女乱国产|操逼无码播放六区|黄色毛片在线观看视频

    1. <big id="vhnbr"></big>