Jscript 腳本中的語句一般是按照寫的順序來運行的。這種運行稱為順序運行,是程序流的默認方向。
與順序運行不同,另一種運行將程序流轉換到腳本的另外的部分。也就是,不按順序運行下一條語句,而是運行另外的語句。
要使腳本可用,該控制的轉換必須以邏輯方式執行。程序控制的轉換是基於一個“決定”,這個“決定”結果是真或假(返回 Boolean 型 true 或 false)。 創建一個表達式,然後測試其是否為真。主要有兩種程序結構實現本功能。
第一種是選擇結構。用來指明兩種程序流方向,在程序中創建一個交叉點(像岔路)。在 Jscript 中有四種選擇結構可用。
第二種類型的程序控制結構是循環結構。使用循環結構來指明當某些條件保持為真時要重復的動作。當控制語句的條件得到滿足時(通常在某些迭代的特定數字後),控制跳過循環結構傳遞到下條語句。在 Jscript 中有四種循環結構可用。
通過嵌套和堆棧選擇、循環控制結構,可以創建相當復雜的腳本。
第三種形式的結構程序流由意外處理給出,本文檔不作討論。
JScript 支持 if 和 if...else 條件語句。在 if 語句中將測試一個條件,假如該條件滿足測試,執行相關的 JScript 編碼。在 if...else 語句中,假如條件不滿足測試,則將執行不同的代碼。最簡單的 if 語句格式可以在一行中寫完,不過更常見的是多行的 if 和 if...else 語句。
下述示例演示了使用 if 和 if...else 語句的各種可能的語法。第一個示例演示了最簡單的布爾測試。當(且僅當)括號之間的項的值為(或者可被強制轉換為) true 時,if 後續的語句或語句塊才會被執行。
// smash()
函數是在該代碼的其他地方定義的。//
布爾測試,看newShip
是否為true
。if (newShip)
smash(champagneBottle,bow);
//
在本示例中,除非兩個條件都為真,否則該測試將不會被滿足。if (rind.color == "deep yellow " && rind.texture == "large and small wrinkles")
{
theResponse = ("Is it a Crenshaw melon?");
}
//
在本示例中,只要任何一個條件為真,則測試即會滿足。var theReaction = "";
if ((dayOfWeek == "Saturday") (dayOfWeek == "Sunday"))
{
theReaction = ("I'm off to the beach!");
}
else
{
theReaction = ("Hi ho, hi ho, it's off to work I go!");
}
JScript 也支持隱式的條件格式。該格式在要測試的條件後使用一個問號(而不是在條件前的 if )。它也指定兩個可選項,一個在滿足條件時使用,另一個在條件不滿足時使用。這兩個選擇項之間必須用一個冒號隔開。
var hours = ""; //
下面的代碼指定hours
是包含theHour
的內容,//
還是包含theHour - 12
的內容。hours += (theHour >= 12) ? " PM" : " AM";
假如要一起測試多個條件,並且知道某個條件比其他條件更可能滿足或不滿足測試,可以使用稱為“短路計算”的特性來加速腳本的運行速度。當 JScript 計算邏輯表達式時,只計算要得到結果所需的子表達式。
例如,假如有一個“與”表達式,如 ((x == 123) && (y == 42)),Jscript 首先檢查 x 是否為 123。假如不是,即使 y 等於 42,整個表達式的值也不可能為 true。因此,並不對 y 作測試,Jscript 返回 false 值。
類似地,假如多個條件中只要有一個為真(使用 運算符),則當任何一個條件滿足該測試時測試則停止。假如要測試的條件包括函數調用或其他復合表達式,這種處理方式就有效。出於此種想法,寫 OR 表達式時,先寫最有可能為 true 的條件。寫 AND 表達式時,先寫最有可能為 false 的條件。
以這種方式設計腳本的好處的一個示例是:在下例中假如 runfirst() 返回 0 或 false, 則不會運行 runsecond()。
if ((runfirst() == 0) (runsecond() == 0)) {
//
若干代碼。
}