迴圈
迴圈陳述式可以讓您使用一串值或變數,重複執行特定的程式碼區塊。Adobe 建議您永遠使用大括號 ({}) 括住程式碼區塊。雖然程式碼區塊僅包含一個陳述式時,您可以省略大括號,但是不建議採用這種作法,理由和不建議條件陳述式省去大括號相同:將來若加入其它陳述式,會提高它意外從程式碼區塊排除的可能風險。若將來在程式碼區塊中加入想要包含的陳述式,但忘了加上必要的大括號,則該陳述式就不會成為迴圈的一部分執行。
for
for 迴圈可以讓您針對特定數值範圍的變數重複執行。您必須在 for 陳述式中提供三個運算式:設定為初始值的變數、決定迴圈何時結束的條件陳述式,以及隨每次迴圈變更變數值的運算式。例如,下列程式碼會重複迴圈五次。變數 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