JavaScript高级程序设计 阅读笔记(二十) js错误处(2)


try {
window.openFile1();
alert("成功调用openFile1方法");
} catch (exception) {
alert("发生异常!");
} finally {
alert("try..catch测试结束!");
}


与Java不同,ECMAScript标准在try…catch语句中只能有一个catch语句,因为JavaScript是弱类型的语言,没办法指明catch子句中异常的特定类型。不管错误是什么类型,都由同一个catch语句处理。Mozilla对其进行了扩展,可加多个catch语句,但因为只有 Mozilla 可以使用,因此不推荐使用。

  finally用于包含无论是否有异常发生都要执行的代码,这对关闭打开的链接和释放资源很有用。

  2.1 嵌套 try...catch 语句

  在 try...catch 语句中的 catch 子句中,也会发生错误。此时,就可以使用嵌套的 try...catch 语句。示例:

复制代码 代码如下:


try {
eval("a ++ b");
} catch(oException) {
alert("发生错误!");
try {
var aError = new Array(1000000000000000000000000000000000000000);
} catch(exception) {
alert("在catch子句中发生错误!");
}
} finally{
alert("已完成")
}



2.2 Error对象

  发生错误时,JavaScript有个Error基类用于抛出。它有两个特性:
  i)name——表示错误类型的字符串
  ii)message——实际的错误信息
  Error对象的name对应于它的类,可以是如下值之一:
  EvalError:错误发生在eval()函数中;
  RangeError:数字值超出JavaScript可表示的范围;
  ReferenceError:使用了非法的引用;
  SyntaxError:在eval()函数调用中发生了语法错误,其他的愈发错误由浏览器报告,无法通过try…catch处理;
  TypeError:变量的类型不是预期所需的;
  URIError:在encodeURI或decodeURI函数发生了错误。

  2.3 判断错误类型

  尽管每个 try...catch 语句中只能有一个catch子句,但判断抛出的错误类型方法主要有两种。第一种使用 Error 对象的 name 特性:

复制代码 代码如下:


try {
eval("a ++ b");
} catch(oException) {
if (oException.name = "SyntaxError") {
alert("发生SyntaxError!");
} else {
alert("发生其他错误!");
}
}


第二种使用 instanceof 操作符,并使用不同错误的类名:

复制代码 代码如下:


try {
eval("a ++ b");
} catch(oException) {
if (oException instanceof SyntaxError) {
alert("发生SyntaxError!");
} else {
alert("发生其他错误!");
}
}



2.4 抛出异常

  在ECMAScript第三版引入,用于有目的的抛出异常,抛出的错误对象可为字符串、数字、布尔值或实际的对象,也可以抛出Error对象(其构造函数只有一个函数,即错误信息)。如:

复制代码 代码如下:


throw new Error("错误产生!");  


开发人员抛出的错误和由浏览器自身抛出的错误都在 try...catch 中捕获。例如:

复制代码 代码如下:


function addTwoNumber(a, b) {
if (arguments.length < 2) {
throw new Error("需要传入两个数字!");
}
}
try {
result = addTwoNumber(90);
} catch(oException) {
if (oException instanceof SyntaxError) {
alert("SyntaxError:" + oException.message);
} else if (oException instanceof Error){
alert(oException.message);
}
}



三、调试技巧

  现在的浏览器大多都自带了调试工具,大多数情况下已经够用了,另外IE下还可以用IETest,FireFox下还可以用FireBug。

作者:Artwl
出处:

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wddpdj.html