"数据类型"用来定义一组值。例如,Boolean 数据类型所定义的一组值中仅包含两个值:true 和 false。除了 Boolean 数据类型外,ActionScript 3.0 还定义了其它几个常用的数据类型,如 String、Number 和 Array。您可以使用类或接口来自定义一组值,从而定义自己的数据类型。ActionScript 3.0 中的所有值均是对象,而与它们是基元值还是复杂值无关。
"基元值"是一个属于下列数据类型之一的值:Boolean、int、Number、String 和 uint。基元值的处理速度通常比复杂值的处理速度快,因为 ActionScript 按照一种尽可能优化内存和提高速度的特殊方式来存储基元值。
"复杂值"是指基元值以外的值。定义复杂值的集合的数据类型包括:Array、Date、Error、Function、 RegExp、XML 和 XMLList。

为了提供编译时类型检查,编译器需要知道代码中的变量或表达式的数据类型信息。为了显式声明变量的数据类型,请在变量名后面添加后跟数据类型的冒号运算符 (:) 作为其后缀。要将数据类型与参数相关联,应使用后跟数据类型的冒号运算符。例如,下面的代码向xParam 参数中添加数据类型信息,并用显式数据类型声明变量 myParam:
function runtimeTest(xParam:String)
{
    trace(xParam);
}
var myParam:String = "hello";
runtimeTest(myParam);

is 运算符
is 运算符是 ActionScript 3.0 中的新增运算符,它可用来测试变量或表达式是否为给定数据类型的成员.

is 运算符检查正确的继承层次结构,不但可以用来检查对象是否为特定类的实例,而且还可以检查对象是否是用来实现特定接口的类的实例。下面的示例创建 Sprite 类的一个名为mySprite 的实例,并使用 is 运算符来测试 mySprite 是否为 Sprite 和 DisplayObject 类的实例,以及它是否实现 IEventDispatcher 接口:
var mySprite:Sprite = new Sprite();
trace(mySprite is Sprite);                   // true
trace(mySprite is DisplayObject);            // true
trace(mySprite is IEventDispatcher);         // true

as 运算符
as 运算符是 ActionScript 3.0 中的新增运算符,也可用来检查表达式是否为给定数据类型的成员。但是,与 is 运算符不同的是,as 运算符不返回布尔值,而是返回表达式的值(代替 true)或 null (代替 false)。下面的示例说明了在简单情况下使用 as 运算符替代 is运算符的结果,例如,检查 Sprite 实例是否为 DisplayObject、 IEventDispatcher 和
Number 数据类型的成员。
var mySprite:Sprite = new Sprite();
trace(mySprite as Sprite); // [Sprite 对象 ]
trace(mySprite as DisplayObject); // [Sprite 对象]
trace(mySprite as IEventDispatcher); // [Sprite 对象]
trace(mySprite as Number);   // null
在使用 as 运算符时,右侧的操作数必须是数据类型。如果尝试使用表达式(而非数据类型)作为右侧的操作数,将会产生错误。

动态类
“动态”类定义在运行时可通过添加 /更改属性和方法来改变的对象。非动态类 (如 String类)是 “密封”类。您不能在运行时向密封类中添加属性或方法。
在声明类时,可以通过使用 dynamic 属性来创建动态类。例如,下面的代码创建一个名为Protean 的动态类:
dynamic class Protean
{
     private var privateGreeting:String = "hi";
     public var publicGreeting:String = "hello";
     function Protean()
     {
          trace("Protean instance created");
     }
}
如果要在以后实例化 Protean 类的实例,则可以在类定义的外部向该类中添加属性或方法。例如,下面的代码创建 Protean 类的一个实例,并向该实例中添加两个名称分别为 aString和 aNumber 的属性:
var myProtean:Protean = new Protean();
myProtean.aString = "testing";
myProtean.aNumber = 3;
trace(myProtean.aString, myProtean.aNumber); // 测试 3
添加到动态类实例中的属性是运行时实体,因此会在运行时完成所有类型检查。不能向以这种方式添加的属性中添加类型注释。
您还可以定义一个函数并将该函数附加到 myProtean 实例的某个属性,从而向 myProtean实例中添加方法。下面的代码将 trace 语句移到一个名为 traceProtean() 的方法中:
var myProtean:Protean = new Protean();
myProtean.aString = "testing";
myProtean.aNumber = 3;
myProtean.traceProtean = function ()
{
      trace(this.aString, this.aNumber);
};
myProtean.traceProtean(); // 测试 3
但是,以这种方式创建的方法对于 Protean 类的任何私有属性或方法都不具有访问权限。而且,即使对 Protean 类的公共属性或方法的引用也必须用 this 关键字或类名进行限定。下面的示例说明了 traceProtean() 方法,该方法尝试访问 Protean 类的私有变量和公共变量。
myProtean.traceProtean = function ()
{
trace(myProtean.privateGreeting); // undefined
trace(myProtean.publicGreeting); // hello
};
myProtean.traceProtean();

 

数据类型说明
基元数据类型包括 Boolean、int、Null、Number、String、uint 和 void。ActionScript核心类还定义下列复杂数据类型:Object、Array、Date、Error、Function、RegExp、XML 和 XMLList。
Boolean 数据类型
Boolean 数据类型包含两个值:true 和 false。对于 Boolean 类型的变量,其它任何值都是无效的。已经声明但尚未初始化的布尔变量的默认值是 false。
int 数据类型
int 数据类型在内部存储为 32 位整数,它包含一组介于 -2,147,483,648 (-2 ) 和 312,147,483,647 (2 -1) 之间的整数 (包括 -2,147,483,648 和 2,147,483,647)。早期的 ActionScript 版本仅提供 Number 数据类型,该数据类型既可用于整数又可用于浮点数。在 ActionScript 3.0 中,现在可以访问 32 位带符号整数和无符号整数的低位机器类型。如果您的变量将不会使用浮点数,那么,使用 int 数据类型来代替 Number 数据类型应会更快更高效。对于小于 int 的最小值或大于 int 的最大值的整数值,应使用 Number 数据类型。Number数据类型可以处理 -9,007,199,254,740,992 和 9,007,199,254,740,992(53 位整数值)之间的值。 int 数据类型的变量的默认值是 0。

Null 数据类型
Null 数据类型仅包含一个值:null。这是 String 数据类型和用来定义复杂数据类型的所有类(包括 Object 类)的默认值。其它基元数据类型(如 Boolean、Number、int 和 uint)均不包含 null 值。如果您尝试向 Boolean、Number、int 或 uint 类型的变量赋予 null,则 Flash Player 会将 null 值转换为相应的默认值。不能将 Null 数据类型用作类型注释。
Number 数据类型
在 ActionScript 3.0 中,Number 数据类型可以表示整数、无符号整数和浮点数。但是,为了尽可能提高性能,应将 Number 数据类型仅用于浮点数,或者用于 int 和 uint 类型可以存储的、大于 32 位的整数值。要存储浮点数,数字中应包括一个小数点。如果您省略了小数点,数字将存储为整数。Number 数据类型使用由 IEEE 二进制浮点算术标准 (IEEE-754) 指定的 64 位双精度格式。此标准规定如何使用 64 个可用位来存储浮点数。其中的 1 位用来指定数字是正数还是
负数。11 位用于指数,它以二进制的形式存储。其余的 52 位用于存储“有效位数”(又称为 “尾数”),有效位数是 2 的 N 次幂, N 即前面所提到的指数。

可以将 Number 数据类型的所有位都用于有效位数,也可以将 Number 数据类型的某些位用于存储指数,后者可存储的浮点数比前者大得多。例如,如果 Number 数据类型使用全部 64 位来存储有效位数,则它可以存储的最大数字为 2 -1。如果使用其中的 11 位来存1储指数,则 Number 数据类型可以存储的最大有效数字为 2 。Number 类型可以表示的最小值和最大值存储在 Number 类的名为 Number.MAX_VALUE 和Number.MIN_VALUE 的静态属性中。
Number.MAX_VALUE == 1.79769313486231e+308
Number.MIN_VALUE == 4.940656458412467e-324
尽管这个数字范围很大,但代价是此范围的精度有所降低。Number 数据类型使用 52 位来存储有效位数,因此,那些要求用 52 位以上的位数才能精确表示的数字 (如分数 1/3)将只是近似值。如果应用程序要求小数达到绝对精度,则需要使用实现小数浮点算术(而非二进制浮点算术)的软件。
如果用 Number 数据类型来存储整数值,则仅使用 52 位有效位数。Number 数据类型使用 52 位和一个特殊的隐藏位来表示介于 -9,007,199,254,740,992 (-253 ) 和 9,007,199,254,740,992 (253 ) 之间的整数。Flash Player 不但将 NaN 值用作 Number 类型的变量的默认值,而且还将其用作应返回数字、却没有返回数字的任何运算的结果。例如,如果您尝试计算负数的平方根,结果将是NaN。其它特殊的 Number 值包括“正无穷大”和“负无穷大”。
注意
在被 0 除时,如果被除数也是 0,则结果只有一个,那就是 NaN。在被 0 除时,如果被除数是正数,则结果为正无穷大;如果被除数是负数,则结果为负无穷大。

String 数据类型
String 数据类型表示一个 16 位字符的序列。字符串在内部存储为 Unicode 字符,并使用UTF-16 格式。字符串是不可改变的值,就像在 Java 编程语言中一样。对字符串值执行运算会返回字符串的一个新实例。用 String 数据类型声明的变量的默认值是 null。虽然 null值与空字符串 ("") 均表示没有任何字符,但二者并不相同。
uint 数据类型
uint 数据类型在内部存储为 32 位无符号整数,它包含一组介于 0 和 4,294,967,295 (232 -1)之间的整数(包括 0 和 4,294,967,295)。uint 数据类型可用于要求非负整数的特殊情形。
例如,必须使用 uint 数据类型来表示像素颜色值,因为 int 数据类型有一个内部符号位,该符号位并不适合处理颜色值。对于大于 uint 的最大值的整数值,应使用 Number 数据类型,该数据类型可以处理 53 位整数值。 uint 数据类型的变量的默认值是 0。

void 数据类型
void 数据类型仅包含一个值:undefined。在早期的 ActionScript 版本中,undefined 是Object 类实例的默认值。在 ActionScript 3.0 中, Object 实例的默认值是 null。如果您尝试将值 undefined 赋予 Object 类的实例,Flash Player 会将该值转换为 null。您只能为无类型变量赋予 undefined 这一值。无类型变量是指缺乏类型注释或者使用星号 (*) 作为类型注释的变量。只能将 void 用作返回类型注释。
Object 数据类型
Object 数据类型是由 Object 类定义的。Object 类用作 ActionScript 中的所有类定义的基类。 ActionScript 3.0 中的 Object 数据类型与早期版本中的 Object 数据类型存在以下三方面的区别:第一,Object 数据类型不再是指定给没有类型注释的变量的默认数据类型。第二, Object 数据类型不再包括 undefined 这一值,该值以前是 Object 实例的默认值。第三,在 ActionScript 3.0 中, Object 类实例的默认值是 null。
在早期的 ActionScript 版本中,会自动为没有类型注释的变量赋予 Object 数据类型。ActionScript 3.0 现在包括真正无类型变量这一概念,因此不再为没有类型注释的变量赋予Object 数据类型。没有类型注释的变量现在被视为无类型变量。如果您希望向代码的读者清楚地表明您是故意将变量保留为无类型,可以使用新的星号 (*) 表示类型注释,这与省略类型注释等效。下面的示例显示两条等效的语句,两者都声明一个无类型变量 x:
var x
var x:*
只有无类型变量才能保存值 undefined。如果您尝试将值 undefined 赋给具有数据类型的变量,Flash Player 会将该值 undefined 转换为该数据类型的默认值。对于 Object 数据类型的实例,默认值是 null,这意味着,如果尝试将undefined 赋给 Object 实例,FlashPlayer 会将值 undefined 转换为 null。