JavaScript的錯誤簡易處理

尛沫發表於2014-05-05

除錯JavaScript著實是一件令人頭痛的事情,但現在有很多工具讓除錯工作更方便和準確的發現錯誤資訊。好的錯誤處理技術可以讓指令碼的開發、除錯和部署更流暢。曾經,JavaScript總是因為會出現奇怪的令人困惑的錯誤訊息而知名,除錯這種資訊確實是一段難熬的經歷。以下是解決JavaScript錯誤的一些小方法:

  1. try-catch

    ECMA-262第3版引入了try-catch語句,基本的語法如下所示:

    try {
    }
    catch(error) {
    }
    

    如果try塊中的任何程式碼發生錯誤,就會立即執行catch塊。此時,catch塊會接收到一個包含錯誤資訊的物件。即使不使用這個錯誤物件,也要起個名字,物件中包含的實際資訊因瀏覽器而異,但共同的是一個儲存錯誤訊息的message屬性,ECMA-262還規定了一個儲存錯誤型別的name屬性,所有瀏覽器都支援這個屬性(Opera 9之前的版本除外)。

  2. finally

    雖然在try-catch塊中是可選的,但finally子句一經用,無論如何都會執行,甚至return語句都不會阻止,例如:

    function test() {
      try {
        return 1;
      }
      catch(error) {
        return 2;
      }
      finally {
        return 3;
      }
    }
    
  3. 錯誤型別

    每種錯誤都有對應的錯誤型別,而當錯誤發生時,就會丟擲相應型別的錯誤物件,ECMA-262定義了7種錯誤型別:

    1) Error: 基型別。
    2) EvalError: 使用eval()函式發生異常時丟擲。
    3) RangeError: 數值超出相應範圍時丟擲。
    4) ReferenceError: 找不到物件時丟擲。
    5) SyntaxError: 使用eval()函式中的字串有語法錯誤時丟擲。
    6) TypeError: 在變數中儲存意外型別或訪問不存在的方法時丟擲。
    7) URIError: 使用encodeURIdecodeURI()中URI格式不正確時丟擲。

  4. 丟擲錯誤

    與try-catch相配的還有一個throw操作符,用於丟擲自定義錯誤。丟擲錯誤時,必須給throw操作符指定一個值,這個值的型別沒有要求,例如:

    throw 123;
    throw "Hello World!";
    

    在遇到throw操作符時,程式碼會立即停止執行。

  5. 錯誤事件

    沒有通過try-catch處理的錯誤都會觸發window物件的error事件。任何瀏覽器中,onerror事件處理程式都不會建立event物件,但它可以接受3個引數:錯誤訊息、錯誤所在的URL和行號。只要發生錯誤,無論是不是瀏覽器生成的,都會觸發error事件,並執行這個事件處理程式,如果在事件處理程式中返回false,可以阻止瀏覽器報告錯誤的預設行為,例如:

    window.onerror = function(message, url, line) {
      alert(message);
      return false;
    }
    

    影像也支援error事件,只要影像的src屬性中的URL不能返回可以被識別的影像格式,就會觸發error事件。

本文為Anyforweb技術分享部落格,需要了解網站建設相關,請訪問anyforweb.com。

相關文章