在javascript

时间:2017-12-20 23:42:01

标签: javascript exception

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

  

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

1 个答案:

答案 0 :(得分: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 (;;)构造是一种有意创建循环的方法   不会自行终止。我们只在a时才会突破循环   给出了有效的指导。但我们拼错了promptDirection,其中   将导致“undefined variable”错误。因为catch阻止了   完全忽略它的异常值(e),假设它知道什么   问题是,它错误地将变量错误视为指示错误   输入。这不仅导致无限循环,而且还“埋葬”   有关拼写错误变量的有用错误消息。

     

作为一般规则,不要追踪例外,除非是为了   将它们“路由”到某个地方的目的 - 例如,通过网络到达   告诉另一个系统我们的程序崩溃了。即便如此,请想一想   仔细考虑如何隐藏信息。

     

所以我们想要捕获特定的类型的异常。我们可以做到这一点   在catch块中检查我们获得的异常是否是我们的异常   对此感兴趣并通过重新抛出它。 (...)

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

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

由于catch并未真正验证错误是否真的是无效指示if中没有catch,因此它不会打印{ {1}}的内容),它抓住了(吞噬了遗忘)一个不同的错误*认为它是一个无效的方向 - 最终因错误的原因处理异常。


*正如作者指出的那样,错误将是e而不是undefined is not a function