当前位置: 首页 > news >正文

前端常见七种报错类型及解决方案

目录

一、前端常见报错类型

代码错误

语法错误(SyntaxError ):

引用错误(ReferenceError):

类型错误(TypeError):

范围错误(RangeError):

URLError(URL 错误):

EvalError(eval 错误):

Error(基类型):

逻辑错误

二、解决方案

针对代码错误

针对逻辑错误


一、前端常见报错类型

        错误类型分两种,一种是代码错误,这种错误会在浏览器console面板显示具体错误,可以根据浏览器提供的相关信息去排查;另一种是逻辑错误,这种浏览器不会报错,可以通过断点或打日志排查。

  1. 代码错误

    • SyntaxError (语法错误)

      • 定义:解析代码时发生的语法错误,即代码不符合 JavaScript 编码规则,整个代码都不会执行 。浏览器报错信息通常为 “Uncaught SyntaxError: 相关信息提示” 。
      • 示例:变量声明错误(如 vara = 1; 正确应为 var a = 1; )、缺少括号等。

      • 原因:不熟悉 JavaScript 语法规则,例如变量命名不符合要求(变量由字母、数字、下划线、$ 符号组成,不能以数字开头,不能是关键字和保留字,如 forwhilethis 等 ,且区分大小写 );书写时遗漏必要符号。
    • ReferenceError(引用错误)

      • 定义:引用了一个不存在的变量或对象属性时触发的错误。报错信息类似 “Uncaught ReferenceError: xxx is not defined” ,其中 xxx 是未定义的变量名。
      • 示例console.log(a); ,这里 a未声明。

      • 原因:变量未声明就使用;或者在作用域链中无法找到该变量。
    • TypeError(类型错误)

      • 定义:操作或引用的变量类型不符合预期时出现的错误 。报错如 “Uncaught TypeError: xxx is not a function” (调用了非函数类型的值作为函数 ) 或 “Uncaught TypeError: Cannot read property 'xxx' of null” (试图读取 null 或 undefined 对象的属性 )。
      • 示例var a = new 123; 对字符串、布尔值、数值等原始类型的值使用new命令,就会抛出这种错误,因为new命令的参数应该是一个构造函数。

      • 原因:对变量类型判断失误,在不合适的类型上执行特定操作。
    • RangeError(范围错误)

      • 定义:当一个值超出了其有效范围时触发。例如,数组长度设置为负数,或者 Math.pow() 方法传入过大的参数等。报错信息如 “Uncaught RangeError: 相关范围错误提示” 。
      • 示例var a = new Array(-1); ,创建长度为负数的数组。

      • 原因:对方法参数取值范围不熟悉,或者计算结果超出预期范围
    • URLError(URL 错误)

      • 定义:当使用与 URI 相关的函数(如 decodeURI()encodeURI() 等 ),传入的参数不符合正确的 URI 格式时,就会抛出 URLError 错误。主要涉及到对统一资源标识符(URI)进行编码、解码等操作时出现的问题。
      • 示例

      • 原因:对 URI 相关函数的参数格式不熟悉,或者在处理从外部获取(如用户输入、网络请求返回 )的 URI 数据时,没有进行有效的格式校验,导致传入了非法的 URI 字符串。
    • EvalError(eval 错误)

      • 定义eval() 函数是 JavaScript 中用于计算字符串并执行其中 JavaScript 代码的函数。当 eval() 函数的使用不符合预期,比如在非严格模式下对某些特殊情况的处理,或者尝试执行语法错误的代码字符串时,就可能抛出 EvalError 错误。不过在现代 JavaScript 开发中,由于更推荐使用其他安全的代码执行方式(如函数封装等 ),直接使用 eval() 函数的场景已经很少,所以这种错误也不常见。
      • 示例eval('not a valid javascript code'); // 这里传入的字符串不是合法的 JavaScript 代码
      • 原因:对 eval() 函数的使用场景和限制理解不足,随意将不可信或语法错误的字符串传递给 eval() 函数。另外,在严格模式下,eval() 函数的行为受到更多限制,使用不当也容易引发错误
    • Error(基类型):

      • 定义:Error 是 JavaScript 中所有错误类型的基类,其他六种错误类型(SyntaxError、ReferenceError、TypeError、RangeError、URIError、EvalError )都继承自它。主要用于开发者在代码中手动抛出自定义错误,以便更好地控制和处理程序运行过程中的异常情况 。
      • 示例

      • 原因:开发者在特定业务逻辑下,想要明确标识某个不符合预期的情况为错误,并进行统一的错误处理时,会使用 Error 基类来创建自定义错误对象,比如在验证用户输入、检查函数参数合法性等场景中 。
  2. 逻辑错误

    • 逻辑错误
      • 定义:代码语法正确,浏览器不会报错,但程序运行结果不符合预期。这类错误需要通过打印日志(如 console.log() )或者打断点进行调试排查。
      • 示例:在循环中条件判断错误,导致循环次数不对;或者在算法逻辑中,计算顺序或条件判断有误,使结果错误。比如计算 1 + 2 + 3 +... + 10 ,循环条件设置错误导致计算结果不对。
      • 原因:算法设计不合理、对业务逻辑理解有误、条件判断或流程控制写错等。

二、解决方案

  1. 针对代码错误

    • 语法错误:仔细检查报错行及附近代码,对照 JavaScript 语法规则,查看是否有拼写错误、符号遗漏或多余、变量命名不当等问题。可以借助代码编辑器的语法高亮和错误提示功能辅助排查。
    • 引用错误:确认报错中提到的变量是否已声明,若未声明则添加声明;检查变量作用域,确保在使用变量的地方能正确访问到它。比如检查函数内部变量是否在合适作用域内声明。
    • 类型错误:在操作变量前,使用 typeof 等方法判断变量类型,确保操作与变量类型匹配。如果是读取对象属性报错,先判断对象是否为 null 或 undefined ,可以使用 if (obj) 等条件判断来避免错误。
    • 范围错误:检查涉及范围的操作(如数组长度设置、函数参数取值等 ),确认参数值在有效范围内。对于有取值范围要求的方法,查阅文档明确范围并正确设置参数。
    • URLError:在使用 decodeURI()encodeURI() 等函数前,先对传入的参数进行合法性校验。可以编写自定义函数,根据 URI 的语法规则(如字符的合法范围、编码格式等 )来检查参数。如果是用户输入的 URI 数据,要做好输入提示和格式限制,引导用户输入正确格式的 URI。
    • EvalError:尽量避免使用 eval() 函数,能用其他方式(如函数封装逻辑、使用 JavaScript 内置对象和方法 )实现功能的,就不要用 eval() 。如果必须使用 eval() ,要确保传入的字符串是经过严格校验、来源可信且语法正确的 JavaScript 代码。可以先对字符串进行语法检查(比如借助一些 JavaScript 语法解析库 ),再传递给 eval() 函数。
  2. 针对逻辑错误

    • 使用 console.log() 打印日志:在关键代码位置插入 console.log() 语句,输出变量值、函数执行结果等信息,通过查看控制台输出,分析程序执行过程和数据变化,找出逻辑错误点。
    • 利用浏览器调试工具打断点:在浏览器开发者工具的 “Sources” 面板中,找到对应的 JavaScript 文件,在可疑代码行设置断点。运行代码,程序执行到断点处会暂停,此时可以查看变量的值、调用栈等信息,逐步分析代码执行逻辑,定位错误。
http://www.xdnf.cn/news/365887.html

相关文章:

  • Linux vi/vim编辑器常用命令
  • 多分类问题softmax传递函数+交叉熵损失
  • 嵌入式学习笔记 - 关于结构体成员地址对齐问题
  • Edu教育邮箱申请成功下号
  • Knife4j文档的会被全局异常处理器拦截的问题解决
  • Python MNE-Python 脑功能磁共振数据分析
  • IO-Link系列集线器(三格电子)
  • MySQL 安全架构:从渗透测试到合规审计
  • 对称加密以及非对称加密
  • 从零理解 RAG:检索增强生成的原理与优势
  • Linux系统Shell脚本之sed
  • 深度学习-161-Dify工具之对比使用工作流和聊天流生成图表可视化的html文件
  • css样式实现-新闻列表
  • MySQL相关查询
  • 在 MyBatis 中实现控制台输出 SQL 参数
  • htmlUnit和Selenium的区别以及使用BrowserMobProxy捕获网络请求
  • RoPE长度外推:外插内插
  • ResNet详解
  • 企业名录搜索软件靠谱吗 企业名录搜索软件怎么使用
  • LSTM的简单模型
  • git做commit信息时的校验
  • C++ —— 可变参数
  • D720201 PCIE 转USB HUB
  • 值拷贝、浅拷贝和深拷贝
  • 利用混合磁共振成像 - 显微镜纤维束成像技术描绘结构连接组|文献速递-深度学习医疗AI最新文献
  • DAY04:Vue.js 指令与事件处理深度解析之从基础到实战
  • 弹窗表单的使用,基于element-ui二次封装
  • 十三、基于大模型的在线搜索平台——整合function calling流程
  • 萤石无插件取流巡检组件,便捷支持多屏预览与回放
  • MCP(Model Context Protocol,模型上下文协议)