try
, catch
和finally
块用于处理异常(一种错误)。在了解它们之前,您需要了解编程中的错误类型。
错误类型
在编程中,代码中可能存在两种错误:
语法错误 : 语法错误 。例如,如果您编写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
在上面的程序中,发生错误,并且该错误被catch
块catch
。在任何情况下(如果程序成功运行或发生错误),将执行finally
块。
注意 :在try
语句之后,您需要使用catch
或finally
语句。否则,程序将引发错误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语句。