JavaScript Try...Catch 语句

本文介绍JavaScript中的try...catch语句及onerror事件,演示如何通过这些方法捕获并处理错误,提高用户体验。

try...catch 的作用是测试代码中的错误。

实例

try...catch 语句
如何编写 try...catch 语句。
带有确认框的 try...catch 语句
另一个编写 try...catch 语句的例子。

JavaScript - 捕获错误

当我们在网上冲浪时,总会看到带有 runtime 错误的 Javascript 警告框,同时会询问我们“是否进行 debug?”。像这样的错误信息或许对开发人员有用,对用户则未必。当错误发生时,他们往往会选择离开这个站点。

本节向你讲解如何捕获和处理 Javascript 的错误消息,这样就可以为受众提供更多的便利。

有两种在网页中捕获错误的方法:

  • 使用 try...catch 语句。(在 IE5+、Mozilla 1.0、和 Netscape 6 中可用)
  • 使用 onerror 事件。这是用于捕获错误的老式方法。(Netscape 3 以后的版本可用)

注意:chrome、opera 和 safari 浏览器不支持 onerror 事件。

Try...Catch 语句

try...catch 可以测试代码中的错误。try 部分包含需要运行的代码,而 catch 部分包含错误发生时运行的代码。

语法:

try
{
   //在此运行代码
}
catch(err)
{
   //在此处理错误
}

注意:try...catch 使用小写字母。大写字母会出错。

实例 1

下面的例子原本用在用户点击按钮时显示 "Welcome guest!" 这个消息。不过 message() 函数中的 alert() 被误写为 adddlert()。这时错误发生了:

<html>
<head>
<script type="text/javascript">
function message()
{
adddlert("Welcome guest!")
}
</script>
</head>

<body>
<input type="button" value="View message" οnclick="message()" />
</body>

</html>

我们可以添加 try...catch 语句,这样当错误发生时可以采取更适当的措施。

下面的例子用 try...catch 语句重新修改了脚本。由于误写了 alert(),所以错误发生了。不过这一次,catch 部分捕获到了错误,并用一段准备好的代码来处理这个错误。这段代码会显示一个自定义的出错信息来告知用户所发生的事情。

<html>
<head>
<script type="text/javascript">
var txt=""
function message()
{
try
  {
  adddlert("Welcome guest!")
  }
catch(err)
  {
  txt="此页面存在一个错误。\n\n"
  txt+="错误描述: " + err.description + "\n\n"
  txt+="点击OK继续。\n\n"
  alert(txt)
  }
}
</script>
</head>

<body>
<input type="button" value="View message" οnclick="message()" />
</body>

</html>

TIY

实例 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" οnclick="message()" />
</body>

</html>

TIY

onerror 事件

我们马上会讲解 onerror 事件。但首先您需要学习如何使用 throw 语句来创建异常。throw 语句可以与 try...catch 语句一起使用。

`try...catch...finally` 是一种广泛应用于多种编程语言的异常处理机制,用于捕获和处理代码执行过程中可能出现的错误。以下是其详细介绍: ### 基本语法 不同语言的 `try...catch...finally` 语法基本类似,但也存在一些细微差别。 #### JavaScript ```javascript try { // 可能会抛出错误的代码 } catch (error) { // 当 try 块中的代码抛出错误时,会执行这里的代码 // error 是一个包含错误信息的对象 } finally { // 无论 try 块中的代码是否抛出错误,这里的代码总是会执行 } ``` JavaScript 中,`try` 语句包含由一个或多个语句组成的 `try` 块,和至少一个 `catch` 块或者一个 `finally` 块,或者两者兼有,有 `try...catch`、`try...finally`、`try...catch...finally` 三种形式 [^1][^2]。 #### Java ```java try { // 可能会抛出异常的代码 } catch (ExceptionType1 e1) { // 当 try 块中抛出 ExceptionType1 类型的异常时,会执行这里的代码 } catch (ExceptionType2 e2) { // 当 try 块中抛出 ExceptionType2 类型的异常时,会执行这里的代码 } finally { // 无论 try 块中的代码是否抛出异常,这里的代码总是会执行 } ``` 对于 Java 的 `trycatch…finally`,先执行 `try` 中的代码,如果中途出现了异常,直接将异常抛向异常处理器,然后执行 `catch` 中的代码块,最后执行 `finally` 代码块 [^4]。 #### C# ```csharp try { // 可能会抛出异常的代码 } catch (Exception e) { // 当 try 块中的代码抛出异常时,会执行这里的代码 Console.WriteLine(e.Message); } finally { // 必定执行的语句 Console.WriteLine("Pass"); } ``` C# 里也是先尝试执行 `try` 块代码,若有异常则进入 `catch` 块处理,最后执行 `finally` 块 [^5]。 ### 各部分详细解释 - **try 块**:包含可能会抛出错误或异常的代码。当执行到 `try` 块中的代码时,如果发生错误,程序会立即跳转到 `catch` 块(如果存在)进行错误处理 [^1]。 - **catch 块**:当 `try` 块中的代码抛出错误或异常时,`catch` 块会捕获该错误,并执行其中的代码。`catch` 块接收一个参数,通常是一个包含错误信息的对象,通过这个对象可以获取错误的详细信息 [^1]。 - **finally 块**:无论 `try` 块中的代码是否抛出错误或异常,`finally` 块中的代码总是会执行。通常用于执行一些必须要完成的操作,如释放资源、关闭文件等 [^1][^3][^4][^5]。 ### 适用场景 - **资源管理**:在使用文件、网络连接、数据库连接等资源时,确保资源在使用完毕后被正确释放。例如,在 Java 中使用文件流时: ```java import java.io.FileInputStream; import java.io.IOException; public class FileExample { public static void main(String[] args) { FileInputStream fis = null; try { fis = new FileInputStream("example.txt"); // 读取文件内容 } catch (IOException e) { e.printStackTrace(); } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } } } ``` - **错误处理**:捕获并处理代码中可能出现的错误,避免程序因未处理的错误而崩溃。例如,在 JavaScript 中处理异步请求时: ```javascript async function fetchData() { try { const response = await fetch('https://api.example.com/data'); const data = await response.json(); console.log(data); } catch (error) { console.error('请求出错:', error); } finally { console.log('请求完成'); } } fetchData(); ``` ### 注意事项 - **catch 和 finally 语句都是可选的**:但在使用 `try` 语句时必须至少使用一个 `catch` 块或 `finally` 块 [^3]。 - **异常类型匹配**:在 `catch` 块中,可以指定不同的异常类型,程序会根据抛出的异常类型选择合适的 `catch` 块进行处理。如果没有匹配的异常类型,异常会继续向上抛出。 - **`finally` 块的执行**:无论 `try` 块和 `catch` 块中是否有 `return`、`break` 或 `continue` 语句,`finally` 块中的代码都会执行。但要注意,如果 `finally` 块中也有 `return` 语句,会覆盖 `try` 块或 `catch` 块中的 `return` 值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值