创建数组



可以使用多种方法来创建 Array 实例或 Vector 实例。但是,创建每种数组类型的方法多少有些不同。

创建 Array 实例

可以通过调用 Array() 构造函数或使用 Array 文本语法来创建 Array 对象。

Array() 构造函数有三种使用方式。第一种,如果调用不带参数的构造函数,会得到空数组。可以使用 Array 类的 length 属性来验证数组是否不包含元素。例如,下面的代码调用不带参数的 Array() 构造函数:

var names:Array = new Array(); 
trace(names.length); // output: 0

第二种,如果将一个数字用作 Array() 构造函数的唯一参数,则会创建长度等于此数值的数组,并且每个元素的值都设置为 undefined。参数必须为介于值 0 和 4,294,967,295 之间的无符号整数。例如,下面的代码调用带有一个数字参数的 Array() 构造函数:

var names:Array = new Array(3); 
trace(names.length); // output: 3 
trace(names[0]); // output: undefined 
trace(names[1]); // output: undefined 
trace(names[2]); // output: undefined

第三种,如果调用构造函数并传递一个元素列表作为参数,将创建具有与每个参数对应的元素的数组。下面的代码将三个参数传递给 Array() 构造函数:

var names:Array = new Array("John", "Jane", "David"); 
trace(names.length); // output: 3 
trace(names[0]); // output: John 
trace(names[1]); // output: Jane 
trace(names[2]); // output: David

也可以使用 Array 文本创建数组。可以将 Array 文本直接分配给数组变量,如下面的示例所示:

var names:Array = ["John", "Jane", "David"];

创建 Vector 实例

可以通过调用 Vector.<T>() 构造函数创建 Vector 实例。还可以通过调用 Vector.<T>() 全局函数创建 Vector。该函数将指定对象转换为 Vector 实例。ActionScript 没有等效于 Array 文本语法的 Vector。

只要声明 Vector 变量(Vector 方法参数或方法返回类型也一样),就需要指定 Vector 变量的基本类型。在通过调用 Vector.<T>() 构造函数创建 Vector 实例时也要指定基本类型。换句话说,只要在 ActionScript 中使用术语 Vector,就需要指定基本类型。

可以使用 type 参数语法指定 Vector 的基本类型。在代码中,type 参数紧跟单词 Vector。它包括一个点 (.),然后是由尖括号 (<>) 括起来的基类名称,如此示例中所示:

var v:Vector.<String>; 
v = new Vector.<String>();

在此示例的第一行内容中,变量 v 声明为 Vector.<String> 实例。换句话说,它表示只能包含 String 实例的索引数组。第二行调用 Vector() 构造函数创建一个具有相同 Vector 类型的实例(也就是其中所有元素都是 String 对象的 Vector)。该示例将该对象分配给 v

使用 Vector.<T>() 构造函数

如果使用不带任何参数的 Vector.<T>() 构造函数,则该函数会创建一个空的 Vector 实例。可以通过检查 Vector 的 length 属性来测试它是否为空。例如,下面的代码调用不带任何参数的 Vector.<T>() 构造函数:

var names:Vector.<String> = new Vector.<String>(); 
trace(names.length); // output: 0

如果您预先知道 Vector 最初需要多少元素,则可以预定义 Vector 中的元素数。若要使用特定数量的元素创建 Vector,请将元素数作为第一个参数(length 参数)进行传递。因为 Vector 元素不能为空,所以会使用具有基本类型的实例填充这些元素。如果基本类型是允许使用 null 值的引用类型,则所有元素都包含 null。否则,所有元素都包含该类的默认值。例如,uint 变量不能为 null。因此,在下面的代码清单中,使用七个元素创建名为 ages 的 Vector,其中每个元素都包含值 0:

var ages:Vector.<uint> = new Vector.<uint>(7); 
trace(ages); // output: 0,0,0,0,0,0,0 

最后,还可以使用 Vector.<T>() 构造函数创建固定长度 Vector,方法是将 true 作为第二个参数(fixed 参数)进行传递。在这种情况下,将使用指定的元素数创建 Vector,且元素数不可更改。但是请注意,仍然可以更改固定长度 Vector 的元素值。

与 Array 类不同,您不能将值列表传递给 Vector.<T>() 构造函数来指定 Vector 的初始值。

使用 Vector.<T>() 全局函数

除了 Vector.<T>() 构造函数之外,还可以使用 Vector.<T>() 全局函数创建 Vector 对象。Vector.<T>() 全局函数是一个转换函数。当调用 Vector.<T>() 全局函数时,需指定该方法返回的 Vector 的基本类型。可将单个索引数组(Array 或 Vector 实例)作为参数进行传递。该方法随后返回具有指定基本类型的 Vector,其中包含源数组参数中的值。下面的代码清单演示了用于调用 Vector.<T>() 全局函数的语法:

var friends:Vector.<String> = Vector.<String>(["Bob", "Larry", "Sarah"]);

Vector.<T>() 全局函数在两个级别上执行数据类型转换。首先,当 Array 实例传递给该函数时,会返回 Vector 实例。其次,无论源数组是 Array 还是 Vector 实例,该函数都会试图将源数组的元素转换为基本类型的值。该转换使用标准 ActionScript 数据类型转换规则。例如,下面的代码清单将源 Array 中的 String 值转换为结果 Vector 中的整数。第一个值(“1.5”)的小数部分被截断,非数字的第三个值(“Waffles”)在结果中转换为 0:

var numbers:Vector.<int> = Vector.<int>("1.5", "17", "Waffles"]); 
trace(numbers); // output: 1,17,0

如果无法转换任何源元素,则会发生错误。

当代码调用 Vector.<T>() 全局函数时,如果源数组中的某个元素是指定基本类型的子类的实例,则该元素会添加到结果 Vector 中(不发生错误)。只有使用 Vector.<T>() 全局函数才能将基本类型为 T 的 Vector 转换为基本类型为 T 的超类的 Vector。