【零基础学JS - 27 】JavaScript中的 try...catch...finally 语句

👨‍💻 作者简介:程序员半夏 , 一名全栈程序员,擅长使用各种编程语言和框架,如JavaScript、React、Node.js、Java、Python、Django、MySQL等.专注于大前端与后端的硬核干货分享,同时是一个随缘更新的UP主. 你可以在各个平台找到我!
🏆 本文收录于专栏: 零基础学JavaScript,包含JavaScript 基础知识,DOM相关知识,高级知识点,最新ES特性
————————————————————————
🔥 热门专栏:

🥇 学透CSS: 全网阅读超百万,CSDN最强CSS专栏,精通CSS全属性,不做切图仔,从订阅本专栏开始!

🥇 SprinbBoot + Vue3 项目实战: 新鲜出炉的2023实战系列博客,配套视频,用心打磨,篇篇精品.持续更新,值得订阅!

在这里插入图片描述


try、catch 和 finally 块用于处理异常(一种错误类型)。在了解它们之前,你需要了解编程中的错误类型。

错误类型

在编程中,代码可能存在两种类型的错误:

  • 语法错误:语法错误。例如,如果你编写 consol.log(‘your result’);,上述程序将抛出语法错误。上述代码中的 console 拼写错误。

  • 运行时错误:程序执行期间发生的错误。例如,调用无效的函数或变量。

在运行时发生的这些错误称为异常。现在,让我们看看如何处理这些异常。

try…catch 语句

try…catch 语句用于处理异常。它的语法如下:

try {
    // try 块的代码
} 
catch(error) {
    // catch 块的代码  
}

主要的代码位于 try 块中。在执行 try 块时,如果发生任何错误,它将进入 catch 块。catch 块根据 catch 语句处理错误。

如果没有发生错误,则执行 try 块中的代码,并跳过 catch 块。

示例 1:显示未声明的变量

// 在程序中展示 try...catch

const numerator = 100, denominator = 'a';

try {
    console.log(numerator/denominator);

    // 忘记定义变量 a      
    console.log(a);
}
catch(error) {
    console.log('捕获到一个错误'); 
    console.log('错误信息:' + error);  
}

输出:

NaN
捕获到一个错误
错误信息:ReferenceError: a is not defined

在上述程序中,变量 a 没有被定义。当你尝试打印变量 a 时,程序会抛出一个错误。该错误被 catch 块捕获。

try…catch…finally 语句

你还可以使用 try…catch…finally 语句来处理异常。无论代码运行成功还是发生错误,finally 块都会执行。

try…catch…finally 块的语法如下:

try {
    // try 块的代码
} 
catch(error) {
    // catch 块的代码  
}
finally() {
    // 无论如何都会执行的代码
}

示例 2:try…catch…finally 示例

const numerator = 100, denominator = 'a';

try {
    console.log(numerator/denominator);
    console.log(a);
}
catch(error) {
    console.log('捕获到一个错误'); 
    console.log('错误信息:' + error);  
}
finally {
    console.log('finally 会每次执行');
}

输出:

NaN
捕获到一个错误
错误信息:ReferenceError: a is not defined
finally 会每次执行

在上述程序中,发生了一个错误,并且该错误被 catch 块捕获。无论程序是否成功运行或发生错误,finally 块都会执行。

注意:你需要在 try 语句后使用 catch 或 finally 语句。否则,程序将抛出错误 Uncaught SyntaxError: Missing catch or finally after try。

JavaScript 中的 try…catch 在 setTimeout 中的使用

如果异常发生在 “计时” 代码中,如 setTimeout() 中,try…catch 将无法捕获异常。例如,

try {
    setTimeout(function() {
        // 代码中的错误
    }, 3000);
} catch (e) {
    console.log( "不起作用" );
}

上述 try…catch 不起作用,因为引擎已经离开了 try…catch 结构,而函数稍后执行。

要在定时函数内捕获异常,try…catch 块必须位于该函数内部。例如,

setTimeout(function() {
    try {
        // 代码中的错误
    } catch {
        console.log( "捕获到错误" );
    }
}, 3000);

你还可以使用 throw 语句与 try…catch 语句结合使用来使用用户定义的异常。例如,某个数字被 0 除。如果你希望将 Infinity 视为程序中的错误,则可以使用 throw 语句抛出用户定义的异常来处理该情况。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: try catch finallyJavaScript的异常处理机制。try的代码是被监视的,如果发生异常,控制权就会转移到catchcatch的代码用于处理异常。finally的代码总是会被执行,无论是否发生异常。这个机制可以帮助我们更好地处理代码的异常情况,保证程序的稳定性和可靠性。 ### 回答2: JavaScripttry-catch-finally是一种错误处理机制,用于捕获和处理异常情况。 try语句块用于包裹可能会抛出异常的代码。如果try代码块的代码导致了一个异常,那么异常会被抛出,并且程序会跳转到下一个catch语句块。 catch语句块用于捕获并处理异常。在catch语句,你可以指定要执行的代码来处理异常。通常,在这个块,你可以记录错误日志、显示错误信息给用户,或者采取其他适当的措施来处理异常。 finally语句块用于指定无论异常是否抛出都会被执行的代码。不管try代码块是否引发了异常,finally的代码总是会执行。这对于执行清理工作,比如关闭打开的文件或释放资源特别有用。 语法示例: ``` try { // 可能引发异常的代码块 } catch (error) { // 异常处理代码 } finally { // 无论是否有异常,都会执行的代码块 } ``` 请注意以下几点: 1. 可以有多个catch语句块,用于捕获和处理不同类型的异常。 2. catch语句块可以使用一个参数来访问捕获到的异常对象。 3. finally语句块是可选的,但是如果存在,它将始终会被执行。 总之,try-catch-finally语句JavaScript处理异常情况的一种常用方法。通过使用这些语句,我们可以在程序执行过程捕获和处理异常,以及执行任何必要的清理操作。 ### 回答3: 在使用JavaScript编程时,有时会遇到可能发生异常的情况,为了能够更好地处理这些异常,在编写代码时常常会使用try-catch-finally语句块。 try-catch-finally语句块的结构是这样的: try { // 可能会发生异常的代码 } catch (error) { // 发生异常时执行的代码 } finally { // 不论是否发生异常,都会执行的代码 } try块是必需的,其包含可能会发生异常的代码。当发生异常时,控制将传递给catch块。catch块定义了当异常发生时要执行的代码,其error是一个表示异常信息的变量,我们可以使用它来进行后续的处理或者记录日志。 无论异常是否发生,finally的代码都会被执行。一般来说,finally块用于释放资源或进行一些必要的清理工作。无论在try是否发生异常,都能够确保finally的代码被执行。 使用try-catch-finally可以有效地捕获和处理程序运行过程的异常,保证程序的稳定性。在try编写可能发生异常的代码,通过catch块处理异常,避免程序崩溃或出现其他不可预期的错误。finally块可以用来处理具体的清理逻辑,比如关闭文件、数据库连接等等。 总结起来,try-catch-finally语句块是JavaScript用于捕获和处理异常的一种机制,它的使用可以使程序更加健壮,同时保证代码的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

YOLO大王

你的打赏,我的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值