日期:2014-05-16  浏览次数:20369 次

javascript try catch捕获异常

javascript try catch捕获异常
2011年03月26日
  try{
  //code to run
  [break;]
  }catch([exception]){
  //code to run if an exception occurs and the exception is matched
  [break;]
  }[finally{
  //code that is always executed regardless of exception occurring
  }]
  例如
  try{
  window.openMyWindow();
  alert("Method complete!");
  }catch(exception){
  alert("an exception occurred");
  }finally{
  alert("end fo try...catch test.");
  }
  运行try...catch语句时,解释程序首先进入try关键词后的代码块。执行 window.openMyWindow();时,会产生错误。这时,解释程序立刻从try子句中退出,然后进入catch子句,跳过剩下的代码(alert("Method complete!");)。在catch中的alert被执行,然后继续执行finally子句中的代码。
  与java C#不同,javascript在try...catch语句中只能有一个catch子句。因为javascript是弱类型语言,没办法指明catch子句中异常的特定类型,不管是什么错误类型,都是由同一个catch子句处理。而finally子句不管是否发生异常,都要执行当中的代码。
  try...catch的嵌套
  在try...catch语句中,如果catch子句中也发生错误,那么就可以使用嵌套的try...catch语句。
  try{
  eval_r("a++b");
  }catch(oException){
  alert("An exception occurred");
  try{
  var aErrors=new Array(100000000000000000000000);  //caurse error
  aError.push(exception)
  }catch(oException2){
  alert("Another exception occurred");
  }
  }finally{
  alert("all done");
  }
  上面例子中,抛出第一个错误后,立刻出现第一个警告框。继续执行第一个catch子句时,由于尝试创建一个超大的数组,出现了另一个错误。于是进入第二个catch子句,并显示警告框,最后进入finally子句,执行完毕。
  Error对象
  javascript有个Error基类用于抛出。Error对象具有以下特性:
  name---表示错误类型的字符串
  message---实际的错误信息
  Error对象的名称对应于它的类,可以是以下值之一
  类 发生原因 EvalError 错误发生在eval_r()函数中 RangeError 数字的值超出了 javascript可表示的范围即超出了Number.MIN_VALEU和Number.MAX_VALUE ReferenceError 使用了非法的引用 SyntaxError 在eval_r()函数调用中发生了语法错误 TypeError 变量的类型不是预期所需的 URIError 在encodeURI()或者decodeURI()函数中发生了错误。 message特性可为用户提供更加有意义的信息,同时可以阻止浏览器直接报告错误:
  try{
  window.openMyWindow();
  alert("Method complete");
  }catch(oException){
  alert("An exception occurred:"+message.name);
  }finally{
  alert("End of try...catch test.");
  }
  判断错误类型
  1.使用Error对象的name特性
  try{
  window.openMyWindow();
  alert("Method complete");
  }catch(oException){
  if(oExceptioin.name=="SyntaxError"){
  alert("Syntax Error:"+oException.message);
  }else{
  alert("An unexpected orror occurred:"+oException.message);
  }
  }
  2.使用instanceof操作符,并使用不同错误的类名:
  try{
  window.openMyWindow();
  alert("Method complete");
  }catch(oException){
  if(oExceptioin instanceof SyntaxError){
  alert("Syntax Error:"+oException.message);
  }else{
  alert("An unexpected orror occurred:"+oException.message);
  }
  }
  抛出异常 throw
  throw语法如下
  throw error_object; 
  error_object可以是字符串、数字、布尔值或者是实际对象
  throw  "An error occurred";
  throw  1234;
  throw  true;
  throw  new Object();
  也可以抛出一个Error对象。Error对象的构造函数只有一个参数,错误信息。例如
  throw new Error("You tried to do something bad");
  其他的Error子类也可以:
  throw new  SyntaxError("I don't like your syntax");
  throw new  TypeError("What type of variable do you take me for?");
  throw new  RangeError("Sorry,you just don't have the range.");
  throw new  EvalError("That doesn't evaluate.");
  throw new  UEIError("Uri,is that you?");
  throw new ReferenceError("you didn't cite your references properly.");
  实际地说,正常的执行不能继续时,应该抛出一个异常,例如:
  function doAdd(){
  if(arguments.lengthError("Two number are required!");
  }else{
  return a+b;
  }
  }
  结合try...catch捕获异常
  try{
  var result=doAdd(10);
  }catch(oException){
  alert(oException.message);
  }