javascript 中TRY ..CATCH 处理错误的用法.
try { // 此处是可能产生例外的语句 } catch(error) { // 此处是负责例外处理的语句 } finally { // 此处是出口语句 }? try { document.writeln("开始执行try块语句 ---> ") document.writeln("还没有发生例外 ---> ") alert(eval(prompt("输入一个值:",""))) } catch(err) { document.writeln("捕捉到例外,开始执行catch块语句 --->"); document.writeln("错误名称: " + err.name+" ---> "); document.writeln("错误信息: " + err.message+" ---> "); } finally { document.writeln("开始执行finally块语句") }?try { document.writeln("Beginnng the try block") document.writeln("No exceptions yet") // Create a syntax error eval("6 + * 3") document.writeln("Finished the try block with no exceptions") } catch(err) { document.writeln("Exception caught, executing the catch block") document.writeln("Error name: " + err.name) document.writeln("Error message: " + err.message) } document.writeln("Executing after the try-catch statement") ?function evalText() { try { alert(eval(prompt("Enter JavaScript to evaluate:",""))) } catch(err) { if(err.name == "SyntaxError") alert("Invalid expression") else alert("Cannot evaluate") }}? function MyError(msg) { this.name = "MyError" this.message = msg } MyError.prototype = new Error; 然后,我们就可以创建自定义错误子类的实例: myError = new MyError("My error message") ?
七、触发例外
创建一个Error对象后,就可以使用throw语句来触发相应的例外。Throw的语法如下:
throw errObj
errObj必须是一个Error对象或者Error的子类型。在try块代码中触发一个例外后,控制将直接转入catch块。
下面的代码中,在try块中触发了一个例外,设置例外信息为“oops”,然后控制转移到catch块:
var s try { s = "one " throw new Error("oops") s += "two" } catch(err) { s += err.message } s += " three" alert(s)? var inner; var outer; try { document.writeln("Beginning outer try block, no exceptions yet"); try{ document.writeln("Beginning inner try block, no exceptions yet"); // 生成一个引用错误 document.writeln(undefinedVariable) document.writeln("Finished inner try block with no exceptions"); } catch(inner) { // 内部例外处理 document.writeln("Exception caught, beginning inner catch block"); document.writeln("Error type: " + inner.name); document.writeln("Error message: " + inner.message); throw inner; document.writeln("No exceptions thrown in inner catch block"); } finally { document.writeln("Executing inner finally block"); } document.writeln("Finished outer try block with no exceptions"); } catch(outer) { // 外部例外处理 document.writeln("Exception caught, beginning outer catch block"); document.writeln("Error type: " + outer.name); document.writeln("Error message: " + outer.message); } finally { document.writeln("Executing outer finally block"); }?</body>
</html>
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]
我们可以添加try...catch声明,这样当错误发生时可以采取更适当的措施。
下面的例子用try...catch声明重新修改了脚本。由于误写了alert(),所以错误发生了。不过这一次,catch部分捕获到了错误,并用一段准备好的代码来处理这个错误。这段代码会显示一个自定义的出错信息来告知用户所发生的事情。
点击运行可以看到效果:<html>
<head>
<script type="text/javascript">
var txt=""
function message()
{
try
{
adddlert("Welcome guest!")
}
catch(err)
{
txt="There was an error on this page.\n\n"
txt+="Error description: " + err.description + "\n\n"
txt+="Click OK to continue.\n\n"
alert(txt)
}
}
</script>
</head>
<body>
<input type="button" value="View message" onclick="message()" />
</body>
</html>
[Ctrl+A 全选 提示:你可先修改部分代码,再按运行]实例 2
下一个例子会显示一个确认框,让用户来选择在发生错误时点击确定按钮来继续浏览网页,还是点击取消按钮来回到首页。如果confirm方法的返回值为false,代码会把用户重定向到其他的页面。如果confirm方法的返回值为true,那么代码什么也不会做。
点击运行可以看到效果:<html>
<head>
<script type="text/javascript">
var txt=""
function message()
{
try
{
adddlert("Welcome guest!")
}
catch(err)
{
txt="There was an error on this page.\n\n"
txt+="Click OK to continue viewing this page,\n"
txt+="or Cancel to return to the home page.\n\n"
if(!confirm(txt))
??? {
??? document.location.href="http://www.w3school.com.cn/"
??? }
}
}
</script>
</head>
<body>
<input type="button" value="View message" onclick="message()" />
</body>
</html>