“执行此操作或引发错误”的简洁语法

Jos*_*osh 7 javascript

javascript 和其他类似 c 的语言的一个常见习惯用法是使用逻辑“或”运算符,如下所示:

function f(x) {
    return (foo(x) || -1);
}
Run Code Online (Sandbox Code Playgroud)

如果 foo(x) 返回 null(或零,或空字符串),则返回 -1。

如果我不想返回不同的值,而是想抛出错误怎么办?throw是一个关键字,而不是一个函数,所以它不能用在 的右侧||。基本上我想这样做:

function foo(x) {
    result = bar(x);
    if(result) {return result;}
    throw "bar(x) didn't return a value";
}
Run Code Online (Sandbox Code Playgroud)

可以变得更简洁(并且更少冗余)吗?

小智 3

理论上你可以做

function f(x) {
  return foo(x) || (() => { throw "foo(x) didn't return a value"; })();
}
Run Code Online (Sandbox Code Playgroud)

或类似的东西,但你的原始代码没有任何问题。

你也可以尝试

function error(x) { throw x; }
function f(x) { return foo(x) || error("foo(x) didn't return a value"); }
Run Code Online (Sandbox Code Playgroud)

尽管这会报告内部发生的错误error()

如果可以的话,您可以考虑重新设计barfoo自行抛出错误。