javascript try…catch语句的工作原理

javascript try…catch语句的工作原理,javascript,try-catch,Javascript,Try Catch,我试图在browsermob中测试某些输入字段是否工作。我正在尝试使用一个我以前从未使用过的try…catch语句。我知道表格是: try { //some code } catch (){ //some error code }; 在catch语句之后的括号中到底应该放什么? 当我尝试使用该语句时,它会通过catch语句运行所有内容,无论它是否为错误。我做错了什么?请参阅 简而言之,try/catch用于处理异常(使用throw语句“抛出”异常)。try/catch的语法为: try {

我试图在browsermob中测试某些输入字段是否工作。我正在尝试使用一个我以前从未使用过的try…catch语句。我知道表格是:

try {
//some code
} catch (){
//some error code
};
在catch语句之后的括号中到底应该放什么? 当我尝试使用该语句时,它会通过catch语句运行所有内容,无论它是否为错误。我做错了什么?

请参阅

简而言之,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
块的范围内可用。它是指抛出的异常对象(可以是任何类型的对象,例如
字符串,但通常是一个)。

try-catch语句用于检测
try
-块内引发的异常/错误。在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);
}

try{…}中的内容是您想要执行的。catch(){…}中的内容是您希望在try{…}中执行的任何内容出现javascript错误时执行的内容

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

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

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

根据
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)
}

谢谢,我认为这现在更有意义了。所以catch后面的括号中包含的变量就是错误?catch标识符实际上不需要是唯一的(我认为这是JSLint的东西),当
catch
语句运行时,作用域被扩展,一个包含类似标识符的属性的对象被添加到作用域链中,如果作用域中存在另一个同名标识符,它将被简单地隐藏在
catch
块中。@CMS,好吧,可能是JSLint告诉了我一些事情。(我在构建过程中使用JSLint。)我记得当我有两个try/catch语句并且catch语句具有相同的变量名时,出现了一些错误。不过,我会编辑我的帖子以排除该声明,因为它不是真正必要的。注意:此功能不是ECMAScript规范的一部分。所以您不一定需要finally语句?yes finally是语句的可选部分,它保证执行其中的代码,而不管是否存在异常。