比较错误类

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

ActionScript 提供了一些预定义的 Error 类。但您也可以在自己的代码中使用相同的 Error 类。在 ActionScript 3.0 中,有两种主要类型的错误类:ActionScript 核心错误类和 flash.error 包错误类。flash.error 包中包含其他有助于 ActionScript 3.0 应用程序进行开发和调试的类。

核心错误类

核心错误类包括 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 异常。

例如,如果延迟为负或无限,Timer 类就会引发 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 的 Flash Player API 函数(如 Socket.connect())指定了无效的 URI。

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.mask),Flash 运行时会引发 IllegalOperationError,并显示消息“Stage 类不实现此属性或方法”。

  • 子类继承了不需要且不想支持的方法。

  • 在没有辅助功能支持的情况下编译 Flash Player 之后,又调用了某些辅助功能方法。

  • 从 Flash Player 的运行时版本调用仅创作功能。

  • 试图为放在时间轴上的对象设置名称。

IOError

如果发生某种类型的 I/O 异常,则会引发 IOError 异常。

例如,当试图对尚未连接或已断开连接的套接字进行读/写操作时,将引发此错误。

MemoryError

如果内存分配请求失败,则会引发 MemoryError 异常。

默认情况下,ActionScript Virtual Machine 2 不会强制限制 ActionScript 程序所分配的内存大小。在桌面系统中,内存分配故障并不常见。当系统无法分配操作所需的内存时,将会看到这样的错误。因此,在桌面系统中,除非分配请求极大,否则此异常很罕见;例如,分配三十亿个字节的请求是不可能的,因为 32 位 Microsoft® Windows® 程序仅可以访问 2 GB 的地址空间。

ScriptTimeoutError

如果达到了 15 秒的脚本超时间隔,则会引发 ScriptTimeoutError 异常。通过捕获 ScriptTimeoutError 异常,可以更加妥善地处理脚本超时。如果没有异常处理函数,则未捕获的异常处理函数将显示一个带有错误消息的对话框。

为防止恶意开发者捕获这种异常并导致无限循环,仅能够捕获特定脚本运行过程中引发的第一个 ScriptTimeoutError 异常。随后的 ScriptTimeoutError 异常无法由您的代码捕获,并且立即转至未捕获的异常处理函数。

StackOverflowError

如果脚本可用堆栈已经用尽,则会引发 StackOverflowError 异常。

StackOverflowError 异常可能表明发生了无限递归。