Javascript “的简明语法”;执行此操作或抛出错误“;

Javascript “的简明语法”;执行此操作或抛出错误“;,javascript,Javascript,一个常见的习惯用法是javascript,其他类似c的语言使用逻辑“or”运算符,如下所示: function f(x) { return (foo(x) || -1); } 如果foo(x)返回null(或零,或空字符串),则返回-1 如果不是返回不同的值,而是要抛出错误,该怎么办throw是一个关键字,不是函数,因此不能在|的右侧使用。基本上我想这样做: function foo(x) { result = bar(x); if(result) {return re

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

function f(x) {
    return (foo(x) || -1);
}
如果foo(x)返回null(或零,或空字符串),则返回-1

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

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

是否可以使其更简洁(并减少冗余)?

使用高阶函数:

function throw_on_bad(f) {
    var result = f();

    if (result) {
        return result;

    } else {
        throw "Passed function didn't return a value";
    }
}

throw_on_bad(function()  {
    return bar(x));
});
或使用ES6:

throw_on_bad(() => bar(x));
可能返回错误结果的函数被包装在另一个函数中以延迟执行。如果
bar
不接受任何参数,则可以简单地编写为:

throw_on_bad(bar);
没有宏,它就不会比理论上你能做的简单得多

function f(x) {
  return foo(x) || (() => { throw "foo(x) didn't return a value"; })();
}
或者类似的东西,但是你的原始代码没有什么问题

你也可以试试

function error(x) { throw x; }
function f(x) { return foo(x) || error("foo(x) didn't return a value"); }
尽管这将报告发生在
error()
中的错误

如果是一个选项,您可以考虑重新设计<代码> bar <代码>或<代码> fo,以引发错误本身。