📜  JavaScript try … catch … finally语句

📅  最后修改于: 2020-09-27 07:46:04             🧑  作者: Mango

在本教程中,您将在示例的帮助下了解try … catch … finally语句来处理JavaScript中的异常。

trycatchfinally块用于处理异常(一种错误)。在了解它们之前,您需要了解编程中的错误类型。

错误类型

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

语法错误语法错误 。例如,如果您编写consol.log('your result'); ,上述程式会引发语法错误。 console的拼写是上述代码中的错误。

运行时错误 :在程序执行过程中会发生这种类型的错误。例如,
调用无效的函数或变量。

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


JavaScript try … catch语句

try...catch语句用于处理异常。其语法为:

try {
    // body of try
} 
catch(error) {
    // body of catch  
}

主要代码在try块内部。在执行try块时,如果发生任何错误,它将转到catch块。 catch块按照catch语句处理错误

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


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

// program to show try...catch in a program

const numerator= 100, denominator = 'a';

try {
     console.log(numerator/denominator);

    // forgot to define variable a      
    console.log(a);
}
catch(error) {
    console.log('An error caught'); 
    console.log('Error message: ' + error);  
}

输出

NaN
An error caught
Error message: ReferenceError: a is not defined

在上述程序中, 一个变量没有定义。当您尝试打印一个变量,该程序将引发错误。该错误被捕获在catch块中。


试试…抓住…最后声明

您还可以使用try...catch...finally语句来处理异常。当代码成功运行或发生错误时,都将执行finally块。

try...catch...finally块的语法为:

try {
    // try_statements
} 
catch(error) {
    // catch_statements  
}
finally() {
    // codes that gets executed anyway
}

示例2:try … catch … finally示例

const numerator= 100, denominator = 'a';

try {
     console.log(numerator/denominator);
     console.log(a);
}
catch(error) {
    console.log('An error caught'); 
    console.log('Error message: ' + error);  
}
finally {
     console.log('Finally will execute every time');
}

输出

NaN
An error caught
Error message: ReferenceError: a is not defined
Finally will execute every time

在上面的程序中,发生错误,并且该错误被catchcatch 。在任何情况下(如果程序成功运行或发生错误),将执行finally块。

注意 :在try语句之后,您需要使用catchfinally语句。否则,程序将引发错误Uncaught SyntaxError:丢失catch或try之后最终出错。


试试…赶上setTimeout

如果try...catch发生在“ timed “代码中,例如setTimeout(),则try...catch不会捕获该异常。例如,

try {
    setTimeout(function() {
        // error in the code
    }, 3000);
} catch (e) {
  console.log( "won't work" );
}

上面的try...catch无效,因为引擎已经离开了try..catch构造,并且该函数稍后执行。

try..catch块必须在该函数内部才能捕获定时函数的异常。例如,

setTimeout(function() {
    try {
        // error in the code
    } catch {
        console.log( "error is caught" );
    }
}, 3000);

您还可以将throw语句与try...catch语句一起使用,以使用用户定义的异常。例如,某个数字除以0 。如果要将Infinity视为程序中的错误,则可以使用throw语句引发用户定义的异常来处理该情况。

您将在下一个教程中了解JavaScript throw语句。