js【详解】异常(异常的触发 throw ,异常的捕获 try catch , 异常的处理, 常见的异常)

异常的触发

throw 语句手动抛出

throw expression;

expression可以是字符串、布尔值、数字或对象值。

// 用户定义的 throw 语句 --- 通用错误
throw new Error('The number is low');
// 用户定义的throw 语句 --- 引用错误
throw new ReferenceError('this is reference error');

JavaScript 运行时自动抛出

异常的捕获

手动捕获 try catch

try {
  // 执行目标代码
} catch (err) {
  // 控制台打印报错信息
  console.log(err);
} finally {
  // 无论是否报错都会执行的代码
}

实战范例

const number = 5;
try {
     // 用户定义的throw语句
     throw new Error('This is the throw');

}
catch(error) {
    console.log('捕获到一个错误');
    if( number + 8 > 10) {

        // 处理异常的语句
        console.log('错误信息:' + error); 
        console.log('错误已解决');
    }
    else {
        // 无法处理异常
        // 重新抛出异常
        throw new Error('The value is low');
    }
}

执行结果

捕获到一个错误
错误信息:Error: This is the throw
错误已解决

catch 代码块处理了异常,没有发生错误,因此,throw语句不会被重新抛出。

自动捕获

window.onerror = function (message, source, lineno, colno, error) {
  // 解析报错信息
};

可全局监听所有JS的报错

  • message:错误消息(字符串)
  • source:引发错误的脚本的URL(字符串)
  • lineno:发生错误的行号(数值)
  • colno:发生错误的行的列号(数值)
  • error:错误对象(对象)

缺点:

  • 对跨域的 js ,如 CDN 的,不会有详细的报错信息
  • 对于压缩的 js ,需要配合 sourceMap 反查到未压缩代码的行、列

异常的处理

  • 给出适当的错误提示
  • 回退到备用方案
  • 记录错误日志

常见的异常

异常有多种类型,都是 JS 内置的构造函数,可通过 new 创建对应的异常对象实例,如

// 用户定义的 throw 语句 --- 通用错误
throw new Error('The number is low');

Error 错误

JavaScript 中最基本的异常类型,其他异常类型都继承自 Error

SyntaxError 语法错误

代码中存在语法错误时抛出。例如,括号未正确匹配、缺少分号等

遇到语法错误时,JavaScript 解析器无法理解代码,因此会抛出 SyntaxError 异常。

避错方案:使用开发工具中的代码高亮和错误提示来帮助识别和解决语法错误。

TypeError 类型错误

使用了错误的数据类型或对某个值执行了不支持的操作时抛出。例如,对 undefined 或 null 值进行属性访问、调用非函数对象等。

避错方案:确保变量和对象具有正确的类型,并使用条件语句或强制类型转换来避免类型不匹配的操作

ReferenceError 引用错误

引用了不存在的变量或函数时抛出。例如,访问未声明的变量或函数。

console.log(x); // ReferenceError: x is not defined

避错方案:确保所有引用的变量、函数和属性都已经声明或存在,避免在作用域外部引用变量,并注意检查对象的属性是否存在。

RangeError 范围错误

使用了超出有效范围的值时抛出。例如,使用了超出数组边界的索引、传递了超出函数参数有效范围的值等。

var arr = [1, 2, 3];
console.log(arr[5]); // RangeError: Index out of range 数组下标越界

避错方案:确保数组索引和数字值在有效范围内,避免无限循环和超出有效范围的操作。在使用内置对象(如日期)时,确保传递的参数在有效范围内。

URIError(URI 错误)

处理 URI 相关的操作时抛出

AggregateError 聚合错误

AggregateError 是在多个错误被捕获时封装了这些错误的对象。

EvalError(eval 错误)【已废弃】

使用 eval() 函数时发生错误时抛出

EvalError 在现代的 JavaScript 中已经被废弃,因此不建议在代码中使用它。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝阳39

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值