比較各種 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:
|
TypeError
|
當運算元的實際類型不同於預期的類型時,便會擲回 TypeError 例外。
|
在下列情況下會擲回 TypeError:
-
無法將函數或方法的實際參數強制轉型為正式的參數類型。
-
將某個值指定給變數,而且無法將該值強制轉型為變數的類型。
-
is
或
instanceof
運算子的右側不是有效的類型。
-
以不合法的方式使用
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 例外代表可能發生了無窮遞迴。
|
|
|
|