
- ES6 教程
- ES6 - 首頁
- ES6 - 概述
- ES6 - 環境
- ES6 - 語法
- ES6 - 變數
- ES6 - 運算子
- ES6 - 決策
- ES6 - 迴圈
- ES6 - 函式
- ES6 - 事件
- ES6 - Cookie
- ES6 - 頁面重定向
- ES6 - 對話方塊
- ES6 - Void 關鍵字
- ES6 - 頁面列印
- ES6 - 物件
- ES6 - 數字
- ES6 - 布林值
- ES6 - 字串
- ES6 - Symbol
- ES6 - 新的字串方法
- ES6 - 陣列
- ES6 - 日期
- ES6 - 數學
- ES6 - 正則表示式
- ES6 - HTML DOM
- ES6 - 迭代器
- ES6 - 集合
- ES6 - 類
- ES6 - Map 和 Set
- ES6 - Promise
- ES6 - 模組
- ES6 - 錯誤處理
- ES6 - 物件擴充套件
- ES6 - Reflect API
- ES6 - Proxy API
- ES6 - 驗證
- ES6 - 動畫
- ES6 - 多媒體
- ES6 - 除錯
- ES6 - 圖片地圖
- ES6 - 瀏覽器
- ES7 - 新特性
- ES8 - 新特性
- ES9 - 新特性
- ES6 有用資源
- ES6 - 快速指南
- ES6 - 有用資源
- ES6 - 討論
ES6 - 錯誤處理
程式設計中存在三種類型的錯誤:語法錯誤、執行時錯誤和邏輯錯誤。
語法錯誤
語法錯誤,也稱為解析錯誤,在傳統的程式語言中發生在編譯時,在 JavaScript 中發生在解釋時。當 JavaScript 中發生語法錯誤時,只有包含語法錯誤的同一執行緒中的程式碼受到影響,其他執行緒中的其餘程式碼將繼續執行,假設其中沒有任何內容依賴於包含錯誤的程式碼。
執行時錯誤
執行時錯誤,也稱為異常,發生在執行期間(編譯/解釋之後)。異常也會影響其發生的執行緒,允許其他 JavaScript 執行緒繼續正常執行。
邏輯錯誤
邏輯錯誤可能是最難追蹤的錯誤型別。這些錯誤不是語法或執行時錯誤的結果。相反,當你在驅動指令碼的邏輯中犯錯並且沒有得到預期的結果時,就會發生這些錯誤。
你無法捕獲這些錯誤,因為這取決於你的業務需求,你想在程式中使用哪種型別的邏輯。
當發生執行時錯誤時,JavaScript 會丟擲 Error 物件的例項。下表列出了 Error 物件的預定義型別。
序號 | Error 物件及描述 |
---|---|
1 |
EvalError 建立一個表示與全域性函式eval()相關的錯誤發生的例項。 |
2 |
RangeError 建立一個表示數值變數或引數超出其有效範圍時發生的錯誤的例項。 |
3 |
ReferenceError 建立一個表示解除對無效引用的引用時發生的錯誤的例項。 |
4 |
SyntaxError 建立一個表示在解析程式碼時發生的語法錯誤的例項。 |
5 |
TypeError 建立一個表示變數或引數型別無效時發生的錯誤的例項。 |
6 |
URIError 建立一個表示encodeURI()或decodeURI()傳遞無效引數時發生的錯誤的例項。 |
丟擲異常
可以使用throw 語句引發錯誤(預定義或使用者定義)。稍後可以捕獲這些異常,並可以採取適當的操作。以下是相同語法的示例。
語法:丟擲一個通用異常
throw new Error([message]) OR throw([message])
語法:丟擲一個特定異常
throw new Error_name([message])
異常處理
異常處理是透過try...catch 語句完成的。當程式遇到異常時,程式將以不友好的方式終止。為了防止這種意外錯誤,我們可以將程式碼包裝在 try...catch 語句中。
try 塊後面必須緊跟一個 catch 塊或一個 finally 塊(或兩者之一)。當 try 塊中發生異常時,異常將放在 e 中,並執行 catch 塊。可選的 finally 塊在 try/catch 後無條件執行
以下是相同語法的示例。
try { // Code to run [break;] } catch ( e ) { // Code to run if an exception occurs [break;] }[ finally { // Code that is always executed regardless of // an exception occurring }]
示例
var a = 100; var b = 0; try { if (b == 0 ) { throw(“Divide by zero error.”); } else { var c = a / b; } } catch( e ) { console.log("Error: " + e ); }
輸出
在上述程式碼成功執行後,將顯示以下輸出。
Error: Divide by zero error
注意 - 注意:你可以在一個函式中引發異常,然後可以使用try...catch塊在同一函式或呼叫函式中捕獲該異常。
onerror( ) 方法
onerror 事件處理程式是第一個促進 JavaScript 中錯誤處理的功能。每當頁面上發生異常時,都會在 window 物件上觸發 error 事件。
示例
<html> <head> <script type = "text/javascript"> window.onerror = function () { document.write ("An error occurred."); } </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type = "button" value = "Click Me" onclick = "myFunc();" /> </form> </body> </html>
輸出
在上述程式碼成功執行後,將顯示以下輸出。

onerror 事件處理程式提供三條資訊來識別錯誤的確切性質 -
錯誤訊息 - 瀏覽器為給定錯誤顯示的相同訊息。
URL - 發生錯誤的檔案。
行號 - 給定 URL 中導致錯誤的行號。
以下示例顯示瞭如何提取這些資訊。
示例
<html> <head> <script type = "text/javascript"> window.onerror = function (msg, url, line) { document.write ("Message : " + msg ); document.write ("url : " + url ); document.write ("Line number : " + line ); } </script> </head> <body> <p>Click the following to see the result:</p> <form> <input type = "button" value = "Click Me" onclick = "myFunc();" /> </form> </body> </html>
自定義錯誤
JavaScript 支援自定義錯誤的概念。以下示例說明了這一點。
示例 1:帶有預設訊息的自定義錯誤
function MyError(message) { this.name = 'CustomError'; this.message = message || 'Error raised with default message'; } try { throw new MyError(); } catch (e) { console.log(e.name); console.log(e.message); // 'Default Message' }
在上述程式碼成功執行後,將顯示以下輸出。
CustomError Error raised with default message
示例 2:帶有使用者定義錯誤訊息的自定義錯誤
function MyError(message) { this.name = 'CustomError'; this.message = message || 'Default Error Message'; } try { throw new MyError('Printing Custom Error message'); } catch (e) { console.log(e.name); console.log(e.message); }
在上述程式碼成功執行後,將顯示以下輸出。
CustomError Printing Custom Error message