JavaScript中try/catch块的正确使用

JavaScript中try/catch块的正确使用,javascript,Javascript,我在JetBrains Webstorm IDE中写入了一个try/catch块,这给了我一个错误。错误内容如下:“'throw'本地捕获的异常/此检查报告JavaScriptthrow语句的任何实例,其异常总是通过包含try语句捕获的。”。使用throw语句作为“goto”来更改本地控制流可能会令人困惑。” 如果我将catch块中的活动放在try块的If块中,那么我就不需要try/catch/finally。那么除了使用条件语句(If)之外,您还会抛出其他错误吗?您如何避免使用throw作为“

我在JetBrains Webstorm IDE中写入了一个try/catch块,这给了我一个错误。错误内容如下:“'throw'本地捕获的异常/此检查报告JavaScriptthrow语句的任何实例,其异常总是通过包含try语句捕获的。”。使用throw语句作为“goto”来更改本地控制流可能会令人困惑。”

如果我将catch块中的活动放在try块的If块中,那么我就不需要try/catch/finally。那么除了使用条件语句(If)之外,您还会抛出其他错误吗?您如何避免使用throw作为“goto”


谢谢!

这个功能相同,而且更干净。为什么要扔/抓

try {
    var invoice = parseInt(localStorage[0]);
    if(isNaN(invoice)){
        console.warn("invoice NaN; let's fix that...");
        console.log("executing catch");   // not really needed
        this.test();
        invoice = 1;
    }
} finally {
    localStorage[invoice] = JSON.stringify(Ticket);
    console.log("localStorage[" + invoice + '] : ' + localStorage[invoice]);
    localStorage[0] = parseInt(localStorage[0]) + 1;
}

try/catch
通常在调用
try
块中的函数时使用,该函数可能会引发异常。就我个人而言,这种方法并不困扰我。有时这种结构最有意义,我一点也不觉得混淆。如果需要从
try
块内有多个不同的点。如果只需要从其中一个点抛出,则
catch
块可能有点多余,除非您期望其他函数调用也抛出。通常不手动调用
throw
try
/
catch
通常在调用函数时使用调用可能会“抛出”错误,而您希望“捕获”“如果您同意@cdhowie,只需在首选项中禁用此警告即可。这是用于本地控制流的
Inspections->Javascript->错误处理->异常
为什么要抛出错误?为什么您认为将catch代码放在if块中更可取?try/finally即使没有throw和catch也能发挥作用。另一方面,您可能根本不需要try/finally,除非这个.test()抛出错误。请注意,在更复杂的场景中,您可能有多个
throw
语句;使用try/catch块可以集中错误处理代码。如果您只有一个
throw
(并且没有您调用的函数可以抛出),那么以这种方式使用try/catch确实没有什么意义。您是否可以在没有
catch
的情况下使用
try
?@RocketHazmat您必须至少有一个
catch
finally
。如果您只有一个
finally
块,并且发生了错误,那么
finally
块将运行,然后错误将向上传播到调用堆栈。这个构造允许您在错误发生后进行清理,但不能捕获错误-p我很感激大家对这件事的想法。我现在更完全地理解try/catch/finally。
try {
    var invoice = parseInt(localStorage[0]);
    if(isNaN(invoice)){
        console.warn("invoice NaN; let's fix that...");
        console.log("executing catch");   // not really needed
        this.test();
        invoice = 1;
    }
} finally {
    localStorage[invoice] = JSON.stringify(Ticket);
    console.log("localStorage[" + invoice + '] : ' + localStorage[invoice]);
    localStorage[0] = parseInt(localStorage[0]) + 1;
}