js报错:Maximum call stack size exceeded的解决方法

 更新时间:2023年02月10日 11:17:59   作者:ttttter  
这篇文章主要给大家介绍了关于js报错Maximum call stack size exceeded的解决方法,文中通过实例代码将解决的方法介绍的非常详细,需要的朋友可以参考下

最近在写项目的时候,有个部分是判断数组内是否存在这个日期,如果不存在的话则日期减一天或加一天再遍历一次数组内是否存在这个日期,重复此操作直到找到日期为止。

日期操作代码如下

 //日期加一天或减一天
        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错误,这个错误的意思是 "超出最大调用堆栈大小"。

发生这种错误大多都是语句判断没有写对,或者忘了写判断语句导致递归操作无限重复下去。

这里建议是在谷歌浏览器中f12对js文件中报错的位置打断点,一步步看究竟是哪的条件语句出错了。

在这里日期到10月01日的时候,进行日期减一操作时,日变成00了

再下一步操作时,日期2022-10-00就是一个错误日期了,然后就导致递归操作的判断条件一直错误,导致无限递归出现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的解决方法的文章就介绍到这了,更多相关Maximum call stack size exceeded错误内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript严格模式详解

    JavaScript严格模式详解

    在 JavaScript 的严格模式下,对 JavaScript 的写法做了一些限制。如果在严格模式下违反了这些限制,代码就会报错,对javascript严格模式相关知识感兴趣的朋友一起学习吧
    2015-11-11
  • 利用JavaScript编写一个花里胡哨的点击按钮

    利用JavaScript编写一个花里胡哨的点击按钮

    这篇文章主要介绍了如何利用HTML+CSS+JavaScript制作一个花里胡哨的点击按钮。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-03-03
  • 浅谈webpack4 图片处理汇总

    浅谈webpack4 图片处理汇总

    这篇文章主要介绍了浅谈webpack4 图片处理汇总,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • JavaScript浅层克隆与深度克隆示例详解

    JavaScript浅层克隆与深度克隆示例详解

    这篇文章主要给大家介绍了关于JavaScript浅层克隆与深度克隆的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 基于JS实现一个简单的投票demo

    基于JS实现一个简单的投票demo

    这篇文章主要介绍了如何利用JavaScript实现一个简单的投票demo,文中的示例代码讲解详细,对我们学习有一定参考价值,需要的可以参考一下
    2022-06-06
  • 改变隐藏的input中value值的方法

    改变隐藏的input中value值的方法

    这篇文章主要介绍了改变隐藏的input中value值的方法,需要的朋友可以参考下
    2014-03-03
  • 深入理解js数组的sort排序

    深入理解js数组的sort排序

    下面小编就为大家带来一篇深入理解js数组的sort排序。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • JavaScript三大重点同步异步与作用域和闭包及原型和原型链详解

    JavaScript三大重点同步异步与作用域和闭包及原型和原型链详解

    这篇文章主要介绍了JavaScript同步异步与作用域和闭包及原型和原型链,每个对象都连接到一个原型对象,并且它可以从中继承属性。所有通过对象字面量创建的对象都连接到object.prototype,它是JavaScript中的标配对象<BR>
    2022-07-07
  • JavaScript中Math对象的方法介绍

    JavaScript中Math对象的方法介绍

    本文主要介绍了JavaScript中Math对象的方法,具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • xml 与javascript结合的问题解决方法

    xml 与javascript结合的问题解决方法

    xml 与javascript结合的问题解决方法...
    2007-03-03

最新评论