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
出处:
您可能感兴趣的文章:
