请详细说明这意味着什么:
'作为一般规则,不要追踪例外,除非是为了在某处“路由”它们 - 例如,通过网络告诉另一个系统我们的程序崩溃。即使在那时,也要仔细考虑如何隐藏信息。 - 雄辩的Javascript
答案 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
。