【发布时间】:2014-09-08 21:17:23
【问题描述】:
我有一个写入 JetBrains Webstorm IDE 的 try/catch 块,它给了我一个错误。错误内容如下:“本地捕获的异常的'throw'/此检查报告 JavaScript throw 语句的任何实例,其异常总是通过包含 try 语句来捕获。使用 throw 语句作为 'goto' 来更改本地控制流可能会令人困惑。”
try {
var invoice = parseInt(localStorage[0]);
if (isNaN(invoice)) {
console.warn("invoice NaN; let's fix that...");
throw "executing catch";
}
}
catch (e) {
console.log(e);
this.test();
invoice = 1;
}
finally {
localStorage[invoice] = JSON.stringify(Ticket);
console.log("localStorage[" + invoice + '] : ' + localStorage[invoice]);
localStorage[0] = parseInt(localStorage[0]) + 1;
}
如果我将 catch 块中的活动放入 try 块的 if 块中,那么我将不需要 try/catch/finally。那么除了使用条件语句 (if) 之外,您还能如何抛出错误,以及如何避免将 throw 用作“goto”?
谢谢!
【问题讨论】:
-
try/catch通常用于try块中有函数调用,该函数可能会抛出异常。 -
就个人而言,这种方法并不困扰我。有时这种结构最有意义,我一点也不觉得它令人困惑。如果您可能需要从
try块内的多个不同点进行投掷,这将特别有用。如果你只需要从一个抛出,那么catch块可能有点多余,除非你期望其他一些函数调用也会抛出。 -
您通常不会手动致电
throw。try/catch通常在您调用的函数可能“抛出”错误并且您想“捕获”它时使用。 -
如果您同意@cdhowie,您可以在首选项中禁用此警告。这是
Inspections -> Javascript -> Error Handling -> Exception used for local control-flow -
为什么会报错?为什么你认为将 catch 代码放在 if 块中是可取的?即使没有 throw 和 catch,try/finally 仍然可以发挥作用。
标签: javascript