【笔记】JS的异常

前言

JS的异常学习笔记

抛出异常

  • 通过throw关键字抛出异常,抛出以上后JS引擎会终止执行当前作用域之后的代码
    • 如果当前异常被捕获,则立即进入catch代码块中处理捕获到的异常
    • 如果当前异常没有被捕获,则会继续向上层作用域抛出异常
    • 如果当前异常直到全局作用域也没有被捕获,则JS引擎会终止执行全局作用域之后的所有代码,并在控制台输出一个错误信息

抛出任意类型的异常

抛出字符串类型的异常

1
throw "文本内容";
1
Uncaught 文本内容

抛出对象类型的异常

1
throw {};
1
Uncaught {}

抛出Error类型的异常

  • 抛出Error类型的异常会输出调用栈信息
    • 调用栈信息的index.js表示index.js文件中出现异常
    • 调用栈信息的1表示第1行出现异常
    • 调用栈信息的7表示第7列出现异常,7是代码new Error()位置的n的下标,如果当前行包含空格也会被计算到下标中
1
throw new Error("文本内容");
1
2
Uncaught Error: 文本内容
at index.js:1:7

捕获异常

  • 通过try...catch代码块捕获异常

获取Error对象

1
2
3
4
5
6
7
try {
throw new Error("文本内容");
} catch (e) {
console.log(e.message);
console.log(e.name);
console.log(e.stack);
}
1
2
3
4
文本内容
Error
Error: 文本内容
at index.js:1:7

不获取Error对象(ES9)

1
2
3
4
5
try {
throw new Error("文本内容");
} catch {
...
}

最终

  • finally代码块中的代码无论是否捕获到异常都会执行
1
2
3
4
5
6
7
try {
throw new Error("文本内容");
} catch (e) {
...
} finally {
...
}

完成