📜  哪些关键字用于处理 JavaScript 中的异常?

📅  最后修改于: 2022-05-13 01:56:45.675000             🧑  作者: Mango

哪些关键字用于处理 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”子句。 “catch”子句是在“try”子句中发生异常时最有效的代码块。尽管“catch”子句是可选的,但没有它处理异常是不够的。这是因为“catch”子句阻止异常通过决策堆栈传播,从而允许该系统恢复。如果在“try”块内发生异常,则将其移交给“catch”子句,不会有太多延迟。异常被传递给“catch”块进行处理。以下实例显示了如何使用“catch”子句来处理“ReferenceError”。请注意,“ReferenceError”项通过“exception”变量包含在“catch”子句中。

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”子句。在这种类型的场景中,执行“finally”子句之后抛出的异常正常进行。

尽管“try”或“catch”子句执行“return”声明,但仍将执行“finally”子句。例如,后续特征返回 fake,因为“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!");