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

时间:2016-11-11 04:01:57

标签: javascript

常见的习语是javascript和其他类似c的语言是使用逻辑"或"像这样的运算符:

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";
}

这可以更简洁(更少冗余)吗?

2 个答案:

答案 0 :(得分:1)

使用更高阶的功能:

$(window).width() < 700

或者使用ES6:

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));
});

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

bar

没有宏,它不会比那个简单得多。

答案 1 :(得分:1)

理论上你可以做到

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()内发生的错误。

如果是一个选项,您可以考虑重新设计barfoo以自行抛出错误。