适当的内联尝试捕获

Jac*_*nkr 1 javascript try-catch

在Javascript中(或者大多数情况下,ECMAscript一般)哪种写法最合适?

try { ajax.abort() } catch(e) { console.error (e) }
Run Code Online (Sandbox Code Playgroud)

要么

try { ajax.abort(); } catch(e) { console.error (e); }
Run Code Online (Sandbox Code Playgroud)

对于这种情况,似乎不需要分号,但同时我通常将其写在5行而不是1行,在这种情况下,我使用分号作为标准编程目的(eol).

两者都有效,我相信两者都会验证,这在语义上是否正确?

Mar*_*ski 9

这是表达式的内联 try-catch 。您可以一次性计算一个值,但仍然会捕获异常并在计算失败时回退到默认值 - 与三元运算符的精神类似?:

function trycatch(func, fail) {
    try { return func() }
    catch(e) { return fail }
}
Run Code Online (Sandbox Code Playgroud)

表达式必须封装在函数中,以便在函数内部执行,trycatch()而不是在函数外部执行。使用示例:

let value = trycatch(() => JSON.parse("parsing fails on this input"), null)
Run Code Online (Sandbox Code Playgroud)


T.J*_*der 7

它们在语义上是相同的,并且由于自动分号插入,它们在语法上都是正确的.


这部分是意见:

我建议总是明确地编写必要的分号,而不是依赖于ASI.但即使你这样做,ASI也会咬你.经典的例子是:

function foo() {
    return
        "testing";
}
Run Code Online (Sandbox Code Playgroud)

如果你打电话foo,返回值将undefined不是"testing",因为ASI开始并在;之后添加一个return.哎哟.