【问题标题】:How javascript try...catch statement worksjavascript try...catch 语句的工作原理
【发布时间】:2010-08-14 17:55:11
【问题描述】:

我正在尝试在 browsermob 中测试某些输入字段是否有效。我正在尝试使用我以前从未使用过的 try...catch 语句。我知道表格是:

try {
//some code
} catch (){
//some error code
};

catch 语句后面的括号中到底应该放什么? 当我尝试使用该语句时,无论它是否不是错误,它都会通过 catch 语句运行所有内容。我做错了什么?

【问题讨论】:

    标签: javascript try-catch


    【解决方案1】:

    请参阅try...catch statement” guide on MDN

    简而言之,try/catch 用于处理异常(使用throw 语句“抛出”)。 try/catch 的语法是:

    try {
        // Code
    } catch (varName) {              // Optional
        // If exception thrown in try block,
        // execute this block
    } finally {                      // Optional
        // Execute this block after
        // try or after catch clause
        // (i.e. this is *always* called)
    }
    

    varName 仅适用于 catch 块的范围。它指的是抛出的异常对象(可以是任何类型的对象,例如String,但通常是Error object)。

    【讨论】:

    • 谢谢,我认为这现在更有意义了。那么catch后面的括号里面的变量就是errors?
    • catch 标识符并不需要是唯一的(我认为那是 JSLint 的东西),当 catch 语句运行时,范围被扩大,一个对象包含一个名为标识符的属性被添加到作用域链中,如果作用域中存在另一个同名标识符,它将被简单地隐藏在 catch 块内。
    • @CMS,好吧,也许是 JSLint 告诉我的。 (我在构建过程中使用 JSLint。)当我有两个 try/catch 语句并且 catch 语句具有相同的变量名时,我记得发生了一些错误。不过,我将编辑我的帖子以排除该声明,因为它并不是真正必要的。
    • 注意:此功能不是 ECMAScript 规范的一部分。
    【解决方案2】:

    try catch 语句用于检测try-block 内引发的异常/错误。然后,您可以在 catch 块中对这种异常行为做出反应并尝试解决它或进入安全状态。

    你的陈述几乎是正确的:

    try {
     // code that may fail with error/exception
    } catch (e) { // e represents the exception/error object
     // react
    }
    

    考虑以下示例:

    try {
      var x = parseInt("xxx");
      if(isNaN(x)){
        throw new Error("Not a number");
      }
    } catch (e) { // e represents the exception/error object
     alert(e);
    }
    
    try {
     // some code
     if(!condition){
       throw new Error("Something went wrong!");
     }
    } catch (e) { // e represents the exception/error object
     alert(e);
    }
    

    【讨论】:

    • 所以你不一定需要finally语句?
    • yes finally 是语句的可选部分,它保证不管有没有异常,它里面的代码都会被执行。
    【解决方案3】:

    try {...} 里面的东西就是你想要执行的。如果您从 try {...} 中执行的任何内容中获得任何 javascript 错误,catch() { ... } 中的内容就是您要执行的内容

    catch {...} 仅在 try {...} 块中存在 javascript 错误时执行。您可以通过执行以下操作找出错误所在:

    try {
     // do something 
    } catch (err) {
      alert(err);
    }
    

    【讨论】:

      【解决方案4】:

      根据ECMAScript规范,

      try {
          // Code
      } catch (varName) {  // optional if 'finally' block is present.
        if (condition) {   // eg. (varName instanceof URIError)
          // Condition (Type) specific error handling
        }
        else {
          // Generic error handling
        }
      } finally {          // Optional if 'catch' block is present.
          // Execute this block after
          // try or after catch clause
          // (i.e. this is *always* called)
      }
      

      【讨论】:

        【解决方案5】:

        可能抛出异常的代码进入try { },抛出异常时要运行的代码进入catch() { }。在 catch() 中,您可以指定要捕获哪些异常,以及将其放入哪些自动变量中。 finally { } 始终运行,无论是否抛出异常。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-11
          • 1970-01-01
          • 1970-01-01
          • 2014-10-31
          • 2010-09-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多