在JavaScript中多次捕获

时间:2015-11-18 13:51:46

标签: javascript

是否可以在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中的相同。

提前致谢!

4 个答案:

答案 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的生产站点上使用它:它不适用于每个用户。实现之间可能存在很大的不兼容性,并且行为可能在将来发生变化。

Reference