循环

循环语句允许您使用一系列值或变量来反复执行一个特定的代码块。Adobe 建议您始终用大括号 ({}) 括起代码块。尽管您可以在代码块中只包含一条语句时省略大括号,但是就像在介绍条件语言时所提到的那样,不建议您这样做,原因也相同:这样会增加无意中将以后添加的语句从代码块中排除的可能性。如果您以后添加一条语句,并希望将它包括在代码块中,但忘了加必要的大括号,则该语句不会在循环过程中执行。

for

使用 for 循环可以循环访问某个变量以获得特定范围的值。必须在 for 语句中提供 3 个表达式:一个设置了初始值的变量,一个用于确定循环何时结束的条件语句,以及一个在每次循环中都更改变量值的表达式。例如,下面的代码循环 5 次。变量 i 的值从 0 开始到 4 结束,输出结果是从 0 到 4 的五个数字,每个数字各占一行。

var i:int; 
for (i = 0; i < 5; i++) 
{ 
    trace(i); 
}

for..in

for..in 循环访问对象属性或数组元素。例如,可以使用 for..in 循环来循环访问通用对象的属性(不按任何特定的顺序来保存对象的属性,因此属性可能以看似随机的顺序出现):

var myObj:Object = {x:20, y:30}; 
for (var i:String in myObj) 
{ 
    trace(i + ": " + myObj[i]); 
} 
// output: 
// x: 20 
// y: 30

还可以循环访问数组中的元素:

var myArray:Array = ["one", "two", "three"]; 
for (var i:String in myArray) 
{ 
    trace(myArray[i]); 
} 
// output: 
// one 
// two 
// three

如果对象是密封类(包括内置类和用户定义的类)的实例,则不能循环访问该对象的属性。您只能循环访问动态类的属性。即使是动态类的实例,您也只能循环访问动态添加的属性。

for each..in

for each..in 循环用于循环访问集合中的项,这些项可以是 XML 或 XMLList 对象中的标签、对象属性保存的值或数组元素。如下面这段摘录的代码所示,可以使用 for each..in 循环来循环访问通用对象的属性,但是与 for..in 循环不同的是,for each..in 循环中的迭代变量包含属性所保存的值,而不包含属性的名称:

var myObj:Object = {x:20, y:30}; 
for each (var num in myObj) 
{ 
    trace(num); 
} 
// output: 
// 20 
// 30

您可以循环访问 XML 或 XMLList 对象,如下面的示例所示:

var myXML:XML = <users> 
    <fname>Jane</fname> 
    <fname>Susan</fname> 
    <fname>John</fname> 
</users>; 
 
for each (var item in myXML.fname) 
{ 
    trace(item); 
} 
/* output 
Jane 
Susan 
John 
*/

还可以循环访问数组中的元素,如下面的示例所示:

var myArray:Array = ["one", "two", "three"]; 
for each (var item in myArray) 
{ 
    trace(item); 
} 
// output: 
// one 
// two 
// three

如果对象是密封类的实例,则您将无法循环访问该对象的属性。即使对于动态类的实例,也无法循环访问任何固定属性(即,作为类定义的一部分定义的属性)。

while

while 循环与 if 语句相似,只要条件为 true,就会反复执行。例如,下面的代码与 for 循环示例生成的输出结果相同:

var i:int = 0; 
while (i < 5) 
{ 
    trace(i); 
    i++; 
}

使用 while 循环(而非 for 循环)的一个缺点是,编写 while 循环更容易导致无限循环。如果遗漏递增计数器变量的表达式,则 for 循环示例代码将无法编译;而 while 循环示例代码将能够编译。若没有用来递增 i 的表达式,循环将成为无限循环。

do..while

do..while 循环是一种 while 循环,保证至少执行一次代码块,这是因为在执行代码块后才会检查条件。下面的代码显示了 do..while 循环的一个简单示例,该示例在条件不满足时也会生成输出结果:

var i:int = 5; 
do 
{ 
    trace(i); 
    i++; 
} while (i < 5); 
// output: 5