是否可以在J S(ES5 or ES6)
中使用多个catch,就像我在下面描述的那样(仅作为示例):
try {
// just an error
throw 1;
}
catch(e if e instanceof ReferenceError) {
// here i would like to manage errors which is 'undefined' type
}
catch(e if typeof e === "string") {
// here i can manage all string exeptions
}
// and so on and so on
catch(e) {
// and finally here i can manage another exeptions
}
finally {
// and a simple finally block
}
这与C#
或Java
中的相同。
提前致谢!
答案 0 :(得分:8)
没有。这在JavaScript或EcmaScript中不存在。
您可以使用if[...else if]...else
内的catch
完成同样的事情。
do have it according to MDN有一些非标准的实现(并且不在任何标准轨道上)。
答案 1 :(得分:4)
尝试这样:
try {
throw 1;
}
catch(e) {
if (e instanceof ReferenceError) {
// ReferenceError action here
} else if (typeof e === "string") {
// error as a string action here
} else {
// General error here
}
}
finally {}
答案 2 :(得分:0)
使用多个if / then / else绝对没有错,但是我从不喜欢它的外观。我发现在排列所有内容后,我的眼睛略快地浏览了一下,所以我改用switch方法来帮助我浏览/搜索到正确的块。现在,ES6 {}
命令已经流行起来,我也开始使用词法作用域let
来封装大小写块。
try {
// OOPS!
} catch (error) {
switch (true) {
case (error instanceof ForbiddenError): {
// be mean and gruff;
break;
}
case (error instanceof UserError): {
// be nice;
break;
}
default: {
// log, cuz this is weird;
}
}
}
答案 3 :(得分:-1)
我们称之为有条件捕获条款
这种多重捕获您还可以使用一个或多个条件catch子句来处理特定的异常。在这种情况下,在抛出指定的异常时输入适当的catch子句。如下
try {
myroutine(); // may throw three types of exceptions
} catch (e if e instanceof TypeError) {
// statements to handle TypeError exceptions
} catch (e if e instanceof RangeError) {
// statements to handle RangeError exceptions
} catch (e if e instanceof EvalError) {
// statements to handle EvalError exceptions
} catch (e) {
// statements to handle any unspecified exceptions
logMyErrors(e); // pass exception object to error handler
}
<强>非标准强>: 但此功能是非标准的,不符合标准。不要在面向Web的生产站点上使用它:它不适用于每个用户。实现之间可能存在很大的不兼容性,并且行为可能在将来发生变化。