常见的习语是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";
}
这可以更简洁(更少冗余)吗?
答案 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()
内发生的错误。
如果是一个选项,您可以考虑重新设计bar
或foo
以自行抛出错误。