try...catch...finally 语句
为 JScript 实现错误处理。
try {
[tryStatements]
} catch(exception) {
[catchStatements]
} finally {
[finallyStatements]}
实参
tryStatements
可选。 可能发生错误的语句。异常
必选。 任何变量名称。 exception 的初始值是引发的错误的值。catchStatements
可选。 处理在相关联的 tryStatement 中发生的错误的语句。finallyStatements
可选。 在所有其他的错误过程发生之后被无条件执行的语句。
备注
try...catch...finally 语句提供了一种方法,可处理给定代码块中可能会发生的一些或全部错误,同时仍保持代码的运行。 如果发生了程序员没有处理的错误,JScript 只给用户提供它的一般错误信息,就好象没有错误处理一样。
tryStatements 参数包含可能发生错误的代码,而 catchStatements 则包含了可处理任何发生的错误的代码。 如果在 tryStatements 中发生了一个错误,则将把程序控制传递给 catchStatements 来处理该错误。 exception 的初始值是发生在 tryStatements 中发生的错误的值。 如果不发生错误,则不执行 catchStatements。
如果在与发生错误的 tryStatements 相关联的 catchStatements 中不能处理该错误,则使用 throw 语句将这个错误传播或重新引发给更高级的错误处理程序。
在执行完 tryStatements 中的语句,并在 catchStatements 的所有错误处理发生之后,可无条件执行 finallyStatements 中的语句。
请注意,即使 try 或 catch 块中出现返回语句,或 catch 块中引发错误,也会执行 finallyStatements 内的代码。 所有 finallyStatements 都一定会运行,除非发生未处理的错误(例如,在 catch 块内导致运行时错误)。
提示
为了避免可能会导致混淆的情况,请不要在 finally 块中使用 return 语句。 finally 块中的代码是在遇到 try 或 catch 块中的某个 return 语句之后,但在执行该 return 语句之前运行的。 在这种情况下,finally 块中的 return 语句会在最初的 return 语句之前 (before) 执行,因而会导致不同的返回值。
示例
说明
下面的示例导致引发了错误,并显示了错误的消息、代码和名称。
代码
try
{
var arr = new Array(-1);
}
catch(e)
{
print ("Error Message: " + e.message);
print ("Error Code: " + (e.number & 0xFFFF))
print ("Error Name: " + e.name);
}
// Output:
// Error Message: Array length must be zero or a positive integer
// Error Code: 5029
// Error Name: RangeError
说明
下面的示例阐释了 JScript 异常处理是如何进行的。
代码
try
{
print("Outer try is running");
try
{
print("Nested try is running");
throw new Error(301, "an error");
}
catch(e)
{
print("Nested catch caught " + e.message);
throw e;
}
finally
{
print("Nested finally is running");
}
}
catch(e)
{
print("Outer catch caught " + e.message);
}
finally
{
print("Outer finally is running");
}
// Output:
// Outer try is running
// Nested try is running
// Nested catch caught an error
// Nested finally is running
// Outer catch caught an error
// Outer finally is running