哪些关键字用于处理JavaScript中的异常
JavaScript 通过”try..catch…finally”语句来处理异常。以下是一个示例语句。
try {
// Attempt to execute this code
} catch (exception) {
// This code handles exceptions
} finally {
// This code always gets executed
}
”try…catch…finally”块的第一个元素是“try”子句。“try”子句用于限制可能生成异常的代码块,并且是必须实施的。 “try”子句应该与“catch”和/或“finally”子句中的一个或多个相伴。
“catch”块: “try…catch…finally”的第二个元素是“catch”子句。如果“try”子句中发生异常,那么“catch”子句是最有效的代码块。尽管“catch”子句是可选的,但没有它不能处理异常。这是因为“catch”子句会阻止异常通过调用堆栈传播,允许系统进行恢复。如果“try”块内发生异常,它会立即传递给“catch”子句。异常会传递给“catch”块进行处理。下面的示例展示了如何使用“catch”子句处理“ReferenceError”异常。请注意,“catch”子句通过“exception”变量包含“ReferenceError”项。
try {
// ReferenceError
foo++;
} catch (exception) {
// It handles the exception
var message = exception.message;
}
复杂的程序可能会产生一些异常。在这种情况下,可以使用“instanceof”运算符区分不同类型的异常。在示例中,预计“try”子句可以生成不同类型的异常。“catch”子句使用“instanceof”逐个处理来自所有不同类型错误的“TypeError”和“ReferenceError”异常。
try {
// Assuming an exception is occurring
} catch (exception) {
if (exception instanceof TypeError) {
// This part handles TypeError exceptions
} else if (exception instanceof ReferenceError) {
// This part handles ReferenceError exceptions
} else {
// This part handles all other
// types of exceptions
}
}
“finally”块: “try…catch…finally”语句的最后一个元素是可选的,即“finally”子句。无论是否出现错误,都会执行“finally”子句中的代码块,它在“try”和“catch”子句之后执行。这对于简化代码(处理剩余文件等)非常有用。请注意,即使发生未捕获的异常,也会执行“finally”子句。在这种情况下,会在执行“finally”子句后正常处理抛出的异常。
即使“try”或“catch”子句执行“return”语句,也会执行“finally”子句。例如,下面的示例返回伪值,因为“finally”子句是最后执行的部分。
function case() {
try {
return true;
} finally {
return false;
}
}
抛出异常: JavaScript允许程序员使用”throw”语句来抛出自己的异常。通过使用它,调试和跟踪程序员变得更加简单。可以抛出任何类型的统计数据作为异常,并且可以捕获和抛出相同数据的多个实例。
“throw”语句可以与任何具有许多好处的数据类型一起使用。例如,Firefox提供了针对对象的调试信息,例如异常发生的文件行号。
例如,文件中的某个地方发生了一个除法运算。由于JavaScript中除以零会导致”NaN”,这可能会产生令人困惑的结果,很难调试。如果应用程序抛出关于”除零”的异常,可以使这个过程更简单。以下”if”语句通过抛出异常来解释这种情况。
尽管”throw”语句可以与任何统计数据类型一起使用,但使用内置的异常类型有一些优势。例如,Firefox通过增加调试信息,如发生异常的文件名和行号,为对象提供了独特的解决方案。
if (denominator === 0)
throw new Error("Attempted division by zero!");