异常的触发
throw 语句手动抛出
expression可以是字符串、布尔值、数字或对象值。
JavaScript 运行时自动抛出
异常的捕获
手动捕获 try catch
实战范例
执行结果
catch 代码块处理了异常,没有发生错误,因此,throw语句不会被重新抛出。
自动捕获
可全局监听所有JS的报错
- message:错误消息(字符串)
- source:引发错误的脚本的URL(字符串)
- lineno:发生错误的行号(数值)
- colno:发生错误的行的列号(数值)
- error:错误对象(对象)
缺点:
- 对跨域的 js ,如 CDN 的,不会有详细的报错信息
- 对于压缩的 js ,需要配合 sourceMap 反查到未压缩代码的行、列
异常的处理
- 给出适当的错误提示
- 回退到备用方案
- 记录错误日志
常见的异常
异常有多种类型,都是 JS 内置的构造函数,可通过 new 创建对应的异常对象实例,如
Error 错误
JavaScript 中最基本的异常类型,其他异常类型都继承自 Error
SyntaxError 语法错误
代码中存在语法错误时抛出。例如,括号未正确匹配、缺少分号等
遇到语法错误时,JavaScript 解析器无法理解代码,因此会抛出 SyntaxError 异常。
避错方案:使用开发工具中的代码高亮和错误提示来帮助识别和解决语法错误。
TypeError 类型错误
使用了错误的数据类型或对某个值执行了不支持的操作时抛出。例如,对 undefined 或 null 值进行属性访问、调用非函数对象等。
避错方案:确保变量和对象具有正确的类型,并使用条件语句或强制类型转换来避免类型不匹配的操作
ReferenceError 引用错误
引用了不存在的变量或函数时抛出。例如,访问未声明的变量或函数。
避错方案:确保所有引用的变量、函数和属性都已经声明或存在,避免在作用域外部引用变量,并注意检查对象的属性是否存在。
RangeError 范围错误
使用了超出有效范围的值时抛出。例如,使用了超出数组边界的索引、传递了超出函数参数有效范围的值等。
避错方案:确保数组索引和数字值在有效范围内,避免无限循环和超出有效范围的操作。在使用内置对象(如日期)时,确保传递的参数在有效范围内。
URIError(URI 错误)
处理 URI 相关的操作时抛出
AggregateError 聚合错误
AggregateError 是在多个错误被捕获时封装了这些错误的对象。
EvalError(eval 错误)【已废弃】
使用 eval() 函数时发生错误时抛出
EvalError 在现代的 JavaScript 中已经被废弃,因此不建议在代码中使用它。