在javascript中正确使用异常

问题描述 投票:1回答:1

请详细说明这意味着什么:

“作为一般规则,不要追踪异常,除非是为了在某处”路由“它们 - 例如,通过网络告诉另一个系统我们的程序崩溃。即使在那时,也要仔细考虑如何隐藏信息。 - 雄辩的Javascript

javascript exception
1个回答
1
投票

假设你的意思是here的解释:

for (;;) {
  try {
    var dir = promtDirection("Where?"); // ← typo!
    console.log("You chose ", dir);
    break;
  } catch (e) {
    console.log("Not a valid direction. Try again.");
  }
}

for (;;)构造是一种有意创建一个不会自行终止的循环的方法。只有在给出有效方向时,我们才会跳出循环。但是我们拼错了promptDirection,这将导致“undefined variable”错误。因为catch块完全忽略了它的异常值(e),假设它知道问题是什么,它错误地将变量错误视为指示错误输入。这不仅会导致无限循环,而且还会“隐藏”有关拼写错误变量的有用错误消息。

作为一般规则,不要追踪异常,除非是为了在某处“路由”它们 - 例如,通过网络告诉另一个系统我们的程序崩溃。即使这样,也要仔细考虑如何隐藏信息。

所以我们希望捕获一种特定的异常。我们可以通过检查catch块来检查我们得到的异常是否是我们感兴趣的异常,否则重新抛出它。 (......)

我相信作者所说的“毯子捕获”例外是捕捉异常并且根本不验证其内容,相信你100%确定它总是会出现某种错误。

示例代码显示“毯子捕获”,假设它只会在用户提供无效方向时发生,但错误实际上是由代码中的拼写错误引起的。

由于catch没有真正验证错误是否真的是一个无效的方向(if中没有catch,也没有打印e的内容),它抓住(吞没了遗忘)一个不同的错误*认为这是一个无效的方向 - 最终因错误的原因处理异常。

*作者指出,错误将是undefined is not a function而不是undefined variable

© www.soinside.com 2019 - 2024. All rights reserved.