js報(bào)錯(cuò):Maximum?call?stack?size?exceeded的解決方法
最近在寫(xiě)項(xiàng)目的時(shí)候,有個(gè)部分是判斷數(shù)組內(nèi)是否存在這個(gè)日期,如果不存在的話則日期減一天或加一天再遍歷一次數(shù)組內(nèi)是否存在這個(gè)日期,重復(fù)此操作直到找到日期為止。
日期操作代碼如下
//日期加一天或減一天
function moreDate(date1,i) {
let date =new Date(date1)
let year = date.getFullYear();
//補(bǔ)全位數(shù)
let month = (date.getMonth()+1).toString().padStart(2,'0')
let day = (date.getDate()+i).toString().padStart(2,'0')
return year+"-"+month+"-"+day
}但是會(huì)存在一個(gè)問(wèn)題就是,由于這個(gè)操作是遞歸操作,每次找不到日期時(shí)不是跳出方法,而是再執(zhí)行一次這個(gè)方法,當(dāng)重復(fù)多次這個(gè)遞歸操作時(shí)就會(huì)導(dǎo)致達(dá)到調(diào)用堆棧限制,就會(huì)有Maximum call stack size exceeded錯(cuò)誤,這個(gè)錯(cuò)誤的意思是 "超出最大調(diào)用堆棧大小"。

發(fā)生這種錯(cuò)誤大多都是語(yǔ)句判斷沒(méi)有寫(xiě)對(duì),或者忘了寫(xiě)判斷語(yǔ)句導(dǎo)致遞歸操作無(wú)限重復(fù)下去。
這里建議是在谷歌瀏覽器中f12對(duì)js文件中報(bào)錯(cuò)的位置打斷點(diǎn),一步步看究竟是哪的條件語(yǔ)句出錯(cuò)了。
在這里日期到10月01日的時(shí)候,進(jìn)行日期減一操作時(shí),日變成00了

再下一步操作時(shí),日期2022-10-00就是一個(gè)錯(cuò)誤日期了,然后就導(dǎo)致遞歸操作的判斷條件一直錯(cuò)誤,導(dǎo)致無(wú)限遞歸出現(xiàn)Maximum call stack size exceeded錯(cuò)誤

所以我們?cè)谶@對(duì)日期加減方法進(jìn)行改良,先對(duì)日期進(jìn)行操作再獲取年月日的數(shù)據(jù)。
//日期加一天或減一天
function moreDate(date1,i) {
let date =new Date(date1)
date.setDate(date.getDate()+i) //先對(duì)日期進(jìn)行加減操作再將日期set回去
let year = date.getFullYear();
//補(bǔ)全位數(shù)
let month = (date.getMonth() + 1).toString().padStart(2, '0')
let day = (date.getDate()).toString().padStart(2, '0')
return year+"-"+month+"-"+day
}再執(zhí)行方法,10月01日減一天就變成了9月30日了,接著順利執(zhí)行遞歸操作。

總結(jié)
到此這篇關(guān)于js報(bào)錯(cuò):Maximum call stack size exceeded的解決方法的文章就介紹到這了,更多相關(guān)Maximum call stack size exceeded錯(cuò)誤內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Javascript的setTimeout()使用閉包特性時(shí)需要注意的問(wèn)題
這篇文章主要介紹了Javascript的setTimeout(0)使用閉包特性時(shí)需要注意的問(wèn)題,需要的朋友可以參考下2014-09-09
Eclipse去除js(JavaScript)驗(yàn)證錯(cuò)誤
這篇文章主要是對(duì)Eclipse去除js(JavaScript)驗(yàn)證錯(cuò)誤進(jìn)行了介紹。在Eclipse中,js文件常常會(huì)報(bào)錯(cuò)??梢酝ㄟ^(guò)如下幾個(gè)步驟解決2014-02-02
javascript每日必學(xué)之基礎(chǔ)入門(mén)
javascript每日必學(xué)之基礎(chǔ)入門(mén),從了解javascript開(kāi)始,一步一步地進(jìn)階到大神境界,想要成為javascript大神的朋友不要錯(cuò)過(guò),閱讀一下2016-02-02
JavaScript知識(shí)點(diǎn)總結(jié)(十一)之js中的Object類(lèi)詳解
這篇文章主要介紹了JavaScript知識(shí)點(diǎn)總結(jié)(十一)之js中的Object類(lèi)詳解的相關(guān)資料,需要的朋友可以參考下2016-05-05

