比較各種 Error 類別

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

ActionScript 可提供幾種預先定義的 Error 類別。但您也可以在自己的程式碼中,使用相同的 Error 類別。ActionScript 3.0 中共有兩種主要的 Error 類別:ActionScript 核心 Error 類別及 flash.error 套件 Error 類別。flash.error 套件包含其他類別,用來協助進行 ActionScript 3.0 應用程式的開發與除錯工作。

核心 Error 類別

核心錯誤類別包括 Error、ArgumentError、EvalError、RangeError、ReferenceError、SecurityError、SyntaxError、TypeError、URIError 以及 VerifyError 類別。這些類別全部都位於命名空間的最上層。

類別名稱

說明

備註

Error

Error 類別是用於擲出例外,同時也是在 ECMAScript 中定義之其它例外類別 (如 EvalError、RangeError、ReferenceError、SyntaxError、TypeError 和 URIError) 的基底類別。

Error 類別可以做為所有執行階段錯誤的基底類別,同時也是任何自訂錯誤類別的建議基底類別。

ArgumentError

ArgumentError 類別所代表的,是在進行函數呼叫期間,所提供的參數值不符合該函數的定義參數時會出現的錯誤。

引數錯誤的幾個範例如下所示:

  • 對方法所提供的引數太少或太多。

  • 所預期的引數是列舉項目,但實際卻不是。

EvalError

當有任何參數傳遞至 Function 類別的建構函式,或是使用者程式碼呼叫 eval() 函數時,就會擲回 EvalError 例外。

在 ActionScript 3.0 中,已經移除了對 eval() 函數的支援,而且嘗試使用該函數,會導致錯誤。

Flash Player 之前的版本使用的是 eval() 函數,依名稱來存取變數、屬性、物件或影片片段。

RangeError

當數值位於可接受的範例之外時,便會擲回 RangeError 例外。

例如,假設延遲是負值,或者不是有限的值,就會擲回 RangeError。若您嘗試在無效的深度新增顯示物件,也會擲回 RangeError。

ReferenceError

嘗試對密封 (非動態) 的物件參照未定義的屬性時,便會擲回 ReferenceError 例外。當嘗試存取的屬性為 undefined 時,ActionScript 3.0 之前的 ActionScript 編譯器版本並不會擲回錯誤。不過,在這種情況下,ActionScript 3.0 會擲出 ReferenceError 例外。

未定義的變數例外會指向可能的錯誤,以協助您改善軟體品質。然而,如果您不習慣初始化變數的要求,ActionScript 這項新的行為可能會要求您略微變更您的編碼習慣。

SecurityError

發生安全性違規且存取遭到拒絕時,便會擲回 SecurityError 例外。

安全性錯誤的幾個範例如下所示:

  • 跨越安全執行程序邊界,並進行未授權的屬性存取或方法呼叫。

  • 嘗試存取安全執行程序不允許的 URL。

  • 已嘗試透過通訊端連線連接至某一通訊埠,但是沒有必要的通訊端原則檔案。

  • 已經嘗試存取使用者的攝影機或麥克風,但使用者拒絕裝置的存取。

SyntaxError

ActionScript 程式碼發生剖析錯誤時,會擲回 SyntaxError 例外。

在下列情況下會擲回 SyntaxError:

  • 當 RegExp 類別剖析無效的規則運算式時,ActionScript 會擲回 SyntaxError 例外。

  • 當 XMLDocument 類別剖析無效的 XML 時,ActionScript 會擲回 SyntaxError 例外。

TypeError

當運算元的實際類型不同於預期的類型時,便會擲回 TypeError 例外。

在下列情況下會擲回 TypeError:

  • 無法將函數或方法的實際參數強制轉型為正式的參數類型。

  • 將某個值指定給變數,而且無法將該值強制轉型為變數的類型。

  • isinstanceof 運算子的右側不是有效的類型。

  • 以不合法的方式使用 super 關鍵字。

  • 屬性查閱造成一個以上的繫結,因而模糊不清。

  • 呼叫不相容物件上的方法。例如,如果將 RegExp 類別中的某個方法「移植」到一般物件,然後再呼叫此方法,便會擲回 TypeError 例外。

URIError

當其中一個全域 URI 處理函數以不相容於其定義的方式使用時,便會擲回 URIError 例外。

在下列情況下會擲回 URIError:

將無效的 URI 指定給期待有效 URI 的 Flash Player API 函數,例如 Socket.connect()

VerifyError

遭遇格式不正確或損毀的 SWF 檔時,便會擲回 VerifyError 例外。

當某個 SWF 檔載入另一個 SWF 檔時,父 SWF 檔案會捕捉載入之 SWF 檔案所產生的 VerifyError。

flash.error 套件 Error 類別

flash.error 套件包含 Error 類別,這些類別都視為是 Flash 執行階段 API 的一部分。與前述的 Error 類別相反,flash.error 套件會與 Flash 執行階段 (如 Flash Player 和 Adobe AIR) 專有的錯誤事件進行通訊。

類別名稱

說明

備註

EOFError

當您嘗試讀取可用資料結尾以外範圍時,會擲出 EOFError 例外。

例如,當您在 IDataInput 介面中呼叫其中一個讀取方法,但資料不足,無法滿足讀取要求時,就會擲出 EOFError。

IllegalOperationError

當方法未實作,或者實作不適用於目前的用法時,會擲回 IllegalOperationError 例外。

不合規定的操作錯誤例外範例包括下列項目:

  • 基底類別 (例如 DisplayObjectContainer) 提供的功能比 Stage 可支援的更多。例如,若您嘗試針對 Stage 取得或設定遮色片 (使用 stage.mask),Flash 執行階段便會擲回 IllegalOperationError 以及「Stage 類別未實作這個屬性或方法」的訊息。

  • 子類別會繼承它不需要且不要支援的方法。

  • 在沒有輔助功能的支援下編譯 Flash Player 時,會呼叫特定輔助功能方法。

  • 從 Flash Player 的執行階段版本呼叫僅供編寫的功能。

  • 您嘗試為時間軸上的物件設定名稱。

IOError

發生某種 I/O 例外時,就會擲回 IOError 例外。

例如,如果嘗試在尚未連線或已經斷線的通訊端上進行讀取-寫入操作,就會收到這個錯誤。

MemoryError

當記憶體配置要求失敗時,會擲回 MemoryError 例外。

根據預設,ActionScript Virtual Machine 2 不會限制 ActionScript 程式可以配置的記憶體數量。桌上型系統很少發生記憶體配置失敗的情形。當系統無法配置作業所需要的記憶體時,就會擲回錯誤。因此桌上型系統很少出現此一例外,除非所要求的配置數量過大,例如要求 30 億位元組 (因為 32 位元的 Microsoft® Windows® 程式只能存取 2 GB 的位址空間)。

ScriptTimeoutError

達到 15 秒的指令碼逾時間隔時,就會擲回 ScriptTimeoutError 例外。您可以藉由捕捉 ScriptTimeoutError 例外,更從容不迫地處理指令碼逾時狀況。如果沒有例外處理常式,未捕捉到的例外處理常式會顯示對話方塊和錯誤訊息。

為避免惡意的開發人員捕捉例外並停留在無限迴圈上,因此只會捕捉特定指令碼過程中所擲出的第一個 ScriptTimeoutError 例外。後續的 ScriptTimeoutError 例外無法由您的指令碼捕捉,而且會立即跳至未捕捉到的例外處理常式。

StackOverflowError

當耗盡指令碼可用的堆疊時,就會擲回 StackOverflowError 例外。

StackOverflowError 例外代表可能發生了無窮遞迴。