- JavaScript從入門到精通(第3版)
- 明日科技
- 2068字
- 2020-03-20 10:37:38
8.2 處理異常
JavaScript語言處理異常通常有兩種方式:一種方式是使用onerror事件,該事件可以在window對象或圖像對象上觸發;另一種方式是使用try...catch...finally模型。本節將分別描述這兩種處理異常的方式。
8.2.1 異常類型
一個程序通常會出現3種類型的異常,分別為“語法異?!薄斑\行時的異?!焙汀斑壿嫯惓!薄F渲?,“語法異?!蓖ǔT诔绦騿T輸入一些編譯器無法識別的代碼后發生;“運行時的異常”通常在運行過程中碰到某個錯誤時發生,與“語法異?!钡膮^別在于它不一定是JavaScript語言的錯誤引發的異常;“邏輯異常”往往發生在程序設計時,即程序沒有按照預先設計的方式運行。
8.2.2 觸發onerror事件處理異常
觸發onerror事件是最早用于處理JavaScript異常的機制。頁面出現異常時,將觸發onerror事件,該事件在window對象上觸發。
語法格式:

參數說明:
window.onerror:觸發onerror事件。
說明
如果在onerror事件處理函數中沒有使用“return true;”語句,在彈出錯誤提示對話框后,瀏覽器的錯誤報告也會顯示出來。為了隱藏此錯誤報告,函數需要返回true。
除了window對象可以觸發onerror事件之外,圖像對象也可以觸發onerror事件。
語法格式:
<script language="javascript"> document.images[0].onerror=function(){ somestatements; return true; } </script>
參數說明:
document.images[0]:頁面中的第一個圖像。
使用onerror事件,除了可以捕捉異常之外,還可以提供如下3種有助于確定異常情況的詳細信息。
異常信息:獲取異常信息。
URL:獲取發生異常的文件的絕對路徑。
行號:給定發生異常文件的行號。
語法格式:

參數說明:
window.onerror:window對象觸發onerror事件。
【例8.1】 使用onerror事件處理異常。(實例位置:資源包\TM\sl\8\01)
本實例使用onerror事件處理在window對象和圖像對象中的異常情況,并以提示框的形式顯示異常信息。運行結果如圖8.3和圖8.4所示。

圖8.3 window對象使用onerror事件處理異常

圖8.4 圖像對象使用onerror事件處理異常
代碼如下:

上述HTML文件中,<body>區域調用了頁面中未定義的函數onHave(),所以執行此頁面將會發出異常,會彈出“您調用的函數不存在”錯誤提示對話框,同時顯示此異常的相關詳細信息,包括錯誤信息、發生異常文件的絕對路徑以及在程序中發生異常的行號。
在頁面中定義了一個圖像,由于此時沒有賦給此圖像src屬性,因此在onerror事件處理函數中賦給第一個圖像src值將會出現異常,程序將彈出錯誤提示對話框。
8.2.3 使用try...catch…finally語句處理異常
JavaScript從Java語言中引入了try...catch...finally功能。
語法格式:

參數說明:
try:檢測異常關鍵字。
catch:捕捉異常關鍵字。
finally:最終被處理的區塊關鍵字。
說明
JavaScript語言與Java語言不同,try...catch…finally語句中只能有一個catch語句。這是由于在JavaScript語言中無法指定出現異常的類型。
【例8.2】 使用try...catch...finally語句處理異常。(實例位置:資源包\TM\sl\8\02)
本實例使用try...catch...finally語句處理異常,當在程序中調用不存在的對象時,將彈出在catch區域中設置的異常提示信息,并且最終彈出finally區域中的信息提示。運行結果如圖8.5和圖8.6所示。

圖8.5 彈出異常提示對話框(1)

圖8.6 彈出異常提示對話框(2)
代碼如下:

由于頁面中并沒有定義表單以及文本框,因此在try區域中調用表單文本框的長度時,將發生異常,這時將執行catch區域中的語句,彈出相應異常提示信息的對話框。
1.嵌套try...catch語句
如果在catch區域中也發生了異常,可以在catch區域中再使用一組try...catch語句,即嵌套使用try...catch語句。
語法格式:

參數說明:
try:檢測異常關鍵字。
catch:捕捉異常關鍵字。
finally:最終被處理的區塊關鍵字。
【例8.3】 使用嵌套try...catch語句處理異常。(實例位置:資源包\TM\sl\8\03)
本實例主要實現嵌套try...catch語句處理異常。在外部try區域中調用不存在的對象時,將彈出外部catch區域內設置的異常提示信息的對話框;在catch區域中調用不存在的對象時,也會產生異常,這時將彈出嵌套catch區域內設置的異常提示信息的對話框及finally區域設置的異常提示信息對話框。運行結果如圖8.7~圖8.9所示。

圖8.7 彈出異常提示對話框(1)

圖8.8 彈出異常提示對話框(2)

圖8.9 彈出異常提示對話框(3)
代碼如下:

在該實例中,拋出第一個異常后,將彈出“try區域運行時有異常發生”提示信息對話框。繼續執行外部catch區域的語句,程序嘗試調用頁面中并不存在的對象,將發生異常,此時彈出“catch區域運行時有異常發生”提示信息對話框。最后執行finally區域的語句,彈出相應對話框。
2.Error對象
try...catch...finally語句中,catch捕捉到的對象通常為Error對象。Error類是所有用于拋出異常的類的基類,類似于Java語言中用于拋出異常的基類Exception。JavaScript中用于拋出異常的類如表8.1所示。
表8.1 JavaScript中用于拋出異常的類

Error對象有以下兩個屬性。
name:表示異常類型的字符串。
message:實際的異常信息。
【例8.4】 驗證Error對象的屬性。(實例位置:資源包\TM\sl\8\04)
本實例將異常提示信息放置在彈出的提示對話框中,其中包括異常的具體信息以及異常類型的字符串。運行結果如圖8.10所示。

圖8.10 異常信息提示對話框
代碼如下:

3.使用throw語句拋出異常
在程序中使用throw語句,可以有目的地拋出異常。
語法格式:
<script language="javascript"> throw new Error("somestatements"); </script>
參數說明:
throw:拋出異常關鍵字。
也可以使用throw語句拋出Error對象子類的對象。
語法格式:
<script language="javascript"> throw new TypeError("somestatements"); </script>
【例8.5】 使用throw語句拋出異常。(實例位置:資源包\TM\sl\8\05)
本實例使用throw語句拋出程序中的異常。在代碼中首先定義一個變量,賦給的值為1與0的商,此變量的結果為無窮大,即Infinity。如果希望自行檢驗除零異常,可以使用throw語句拋出異常。運行結果如圖8.11所示。

圖8.11 使用throw語句拋出異常
代碼如下:

讀者從程序中可以看出,當變量num為無窮大時,使用throw語句拋出異常。此異常在catch區域被捕捉,并將異常提示信息放置在彈出的錯誤提示對話框中。
- Web前端開發技術:HTML、CSS、JavaScript(第3版)
- C語言程序設計教程
- 零基礎學C++程序設計
- Kubernetes實戰
- C#編程入門指南(上下冊)
- 華為HMS生態與應用開發實戰
- Java Web開發之道
- Mastering Google App Engine
- SQL Server 2016數據庫應用與開發
- Learning Python Design Patterns
- Building RESTful Python Web Services
- Learning Probabilistic Graphical Models in R
- Java SE實踐教程
- Fast Data Processing with Spark(Second Edition)
- Django 5企業級Web應用開發實戰(視頻教學版)