標籤:

【亂翻譯】js中的常見Error類和錯誤處理

原文

https://www.sitepoint.com/exceptional-exception-handling-in-javascript/www.sitepoint.com圖標Exceptional Exception Handling in JavaScript — SitePointExceptional Exception Handling in JavaScript — SitePointwww.sitepoint.com圖標

本文只是精簡原文

Error Objects

發生異常時,一個對象,表示創建並引發錯誤。JavaScript語言定義了七個內置錯誤的對象的類型。這些錯誤類型是異常處理的基礎。

Error

該"Error"類型用於表示泛型異常。 通過調用它們的構造函數來實例化「Error」對象,如下例所示。

var error = new Error(「error message」);

Error對象包含兩個屬性name和message。 name屬性指定了異常的類型(在本例中為「Error」)。 message 屬性提供了對異常更詳細的描述。 「消息」從傳遞給異常的構造函數的字元串中獲取它的值。 其餘的異常類型表示更具體的錯誤類型,但是它們都以與通用「錯誤」類型相同的方式使用。

RangeError

RangeError異常是由超出指定範圍的數字生成的。 例如,JavaScript數字有一個toFixed()方法,它帶有一個「digits」參數,表示在小數點後面出現的位數。 這個說法預計在0到20之間(儘管一些瀏覽器支持更廣泛的範圍)。 如果「位數」的值超出此範圍,則會引發「RangeError」。 以下示例顯示了這種情況。

var pi = 3.14159; pi.toFixed100000; // RangeError

ReferenceError

訪問不存在的變數時引發「ReferenceError」異常。 當現有的變數名拼寫錯誤時,通常會出現這些異常。 在以下示例中,訪問「bar」時會出現「ReferenceError」。 請注意,此示例假定嘗試增量操作時,任何活動範圍中都不存在「bar」。

function foo(){ bar++; // ReferenceError }

SyntaxError

當JavaScript語言的規則被破壞時,引發「SyntaxError」。 熟悉C和Java等語言的開發人員在編譯過程中會遇到語法錯誤。 但是,因為JavaScript是一種解釋型語言,所以在執行代碼之前不會識別語法錯誤。 語法錯誤是唯一的,因為它們是無法從中恢復的唯一類型的異常。 下面的示例會生成語法錯誤,因為「if」語句缺少大括弧

iffoo{// SyntaxError //關閉花括弧丟失

TypeError

當值不是預期的類型時,會發生「TypeError」異常。 試圖調用一個不存在的對象方法是這種異常的常見原因。 以下示例創建一個名為「foo」的空對象,然後嘗試調用其bar()方法。 由於bar()沒有被定義,因此嘗試調用時會引發「TypeError」。

var foo = {}; foo.bar(); //類型錯誤

URIError

遇到格式不正確的URI時,encodeURI()和decodeURI()等方法會引發「URIError」異常。 以下示例在嘗試解碼字元串「%」時生成「URIError」。 「%」字元表示URI轉義序列的開始。 由於本例中沒有任何符號「%」,因此字元串是無效的轉義序列,因此URI組件格式錯誤。

decodeURIComponent 「%」); // URIError

EvalError

當eval()函數使用不當時,會引發「EvalError」異常。 在最新版本的EcmaScript標準中不使用這些例外。 但是,為了保持與舊版本標準的向後兼容性,它們仍然受到支持。

處理異常

現在我們知道了什麼是例外情況,現在該學習如何阻止他們使我們的程序崩潰。JavaScript通過「try ... catch ... finally」語句處理異常。 下面顯示了一個通用的示例語句。

try { // attempt to execute this code} catch (exception) { // this code handles exceptions} finally { // this code always gets executed}

「try ... catch ... finally」語句的第一部分是「try」子句。 「try」子句是強制性的,用於劃定程序員懷疑可能產生異常的代碼塊。 「try」子句必須跟隨「catch」和「finally」子句中的一個或兩個。

要記住的事情

  • 「try ... catch ... finally」語句用於處理異常。
  • 「try」子句標識可能會生成異常的代碼。
  • 「catch」子句只在發生異常時執行。
  • 無論如何,「finally」子句總是被執行。
  • 「throw」語句用於生成異常。
  • 自定義的異常對象應該繼承現有的「錯誤」類型

推薦閱讀:

前端日刊-2018.02.03
前端頁面熱更新實現方案
前端日刊-2018.01.16
熟練使用這幾款仿站工具, 推廣事半功倍
前端知識 | CSS小技巧-自適應橢圓

TAG:前端開發 |