Jscript 腳本中的語句一般是按照寫的順序來運行的這種運行稱為順序運行是程序流的默認方向
與順序運行不同另一種運行將程序流轉換到腳本的另外的部分也就是不按順序運行下一條語句而是運行另外的語句
要使腳本可用該控制的轉換必須以邏輯方式執行程序控制的轉換是基於一個決定這個決定結果是真或假(返回 Boolean 型 true 或 false) 創建一個表達式然後測試其是否為真主要有兩種程序結構實現本功能
第一種是選擇結構用來指明兩種程序流方向在程序中創建一個交叉點(像岔路)在 Jscript 中有四種選擇結構可用
單一選擇結構(if) 二路選擇結構(if/else) 內聯三元運算符 ?: 多路選擇結構(switch)
第二種類型的程序控制結構是循環結構使用循環結構來指明當某些條件保持為真時要重復的動作當控制語句的條件得到滿足時(通常在某些迭代的特定數字後)控制跳過循環結構傳遞到下條語句在 Jscript 中有四種循環結構可用 在循環的開頭測試表達式(while) 在循環的末尾測試表達式(do/while) 對對象的每個屬性都進行操作(for/in) 由計數器控制的循環(for)通過嵌套和堆棧選擇循環控制結構可以創建相當復雜的腳本第三種形式的結構程序流由意外處理給出本文檔不作討論
使用條件語句
JScript 支持 if 和 ifelse 條件語句在 if 語句中將測試一個條件如果該條件滿足測試執行相關的 JScript 編碼在 ifelse 語句中如果條件不滿足測試則將執行不同的代碼最簡單的 if 語句格式可以在一行中寫完不過更常見的是多行的 if 和 ifelse 語句下述示例演示了使用 if 和 ifelse 語句的各種可能的語法第一個示例演示了最簡單的布爾測試當(且僅當)括號之間的項的值為(或者可被強制轉換為) true 時if 後續的語句或語句塊才會被執行
//smash() 函數是在該代碼的其他地方定義的
// 布爾測試看 newShip 是否為 true
if (newShip)
smash(champagneBottlebow);
// 在本示例中除非兩個條件都為真否則該測試將不會被滿足
if (lor == deep yellow && rindtexture == large and small wrinkles)
{
theResponse = (Is it a Crenshaw melon?);
}
// 在本示例中只要任何一個條件為真則測試即會滿足
var theReaction = ;
if ((dayOfWeek == Saturday) || (dayOfWeek == Sunday))
{
theReaction = (Im off to the beach!);
}
else
{
theReaction = (Hi ho hi ho its off to work I go!);
}條件運算符
JScript 也支持隱式的條件格式該格式在要測試的條件後使用一個問號(而不是在條件前的 if )它也指定兩個可選項一個在滿足條件時使用另一個在條件不滿足時使用這兩個選擇項之間必須用一個冒號隔開
var hours = ;
// 下面的代碼指定 hours 是包含 theHour 的內容
// 還是包含 theHour 的內容
hours = (theHour >= ) ? PM : AM;如果要一起測試多個條件並且知道某個條件比其他條件更可能滿足或不滿足測試可以使用稱為短路計算的特性來加速腳本的運行速度當 JScript 計算邏輯表達式時只計算要得到結果所需的子表達式
例如如果有一個與表達式如 ((x == ) && (y == ))Jscript 首先檢查 x 是否為 如果不是即使 y 等於 整個表達式的值也不可能為 true因此並不對 y 作測試Jscript 返回 false 值
類似地如果多個條件中只要有一個為真(使用 || 運算符)則當任何一個條件滿足該測試時測試則停止如果要測試的條件包括函數調用或其他復合表達式這種處理方式就有效出於此種想法寫 OR 表達式時先寫最有可能為 true 的條件寫 AND 表達式時先寫最有可能為 false 的條件
以這種方式設計腳本的好處的一個示例是在下例中如果 runfirst() 返回 或 false 則不會運行 runsecond()
if ((runfirst() == ) || (runsecond() == )) {
// 若干代碼
}使用循環
有多種方式來重復執行一條語句或語句塊通常重復執行被稱為循環或重復重復只是循環的一個運行典型情況是用一個變量測試來進行控制每執行一次循環變量的取值都會更改JScript 支持四種循環 for 循環 forin 循環 while 循環 dowhile 循環
使用 for 循環
for 語句指定了一個計數器變量一個測試條件以及更新該計數器的操作在每次循環的重復之前都將測試該條件如果測試成功將運行循環中的代碼如果測試不成功不運循環中的代碼程序繼續運行緊跟在循環後的第一行代碼在執行該循環後計算機變量將在下一次循環之前被更新
如果循環條件永不會滿足則不執行該循環如果測試條件始終滿足則將導致無限循環在有些情況下前者可能是合乎需要的而後者幾乎沒有用處因此在編寫循環條件時一定要注意
/*
更新表達式 (下例中的 icount )將在循環結束時被執行即在構成循環主體的語句塊被執行後在測試條件之前
*/
var howFar = ; // 將循環次數限制為
var sum = new Array(howFar); // 創建一個稱為 sum 並具有 個成員的數組這 個成員從 到
var theSum = ;
sum[] = ;
for(var icount = ; icount < howFar; icount ) { // 在本例中將從 到 進行計數
theSum = icount;
sum[icount] = theSum;}
var newSum = ;for(var icount = ; icount > howFar; icount )
{
// 該循環根本不會被執行因為 icount 不大於 howFar
newSum = icount;
}
var sum = ;
for(var icount = ; icount >= ; icount ) { // 這是一個無限循環
sum = icount;
}使用 forin 循環
JScript 提供了一種特別的循環方式來遍歷一個對象的所有用戶定義的屬性或者一個數組的所有元素forin 循環中的循環計數器是一個字符串而不是數字它包含當前屬性的名稱或者當前數組元素的下標
下面的代碼范例應在 Internet 浏覽器中運行因為它使用 alert 方法該方法不屬於 Jscript
// 創建具有某些屬性的對象
var myObject = new Object();
myObjectname = James;
myObjectage = ;
myObjectphone = ;
// 枚舉(循環)對象的所有屬性
for (prop in myObject){
// 顯示 The property name is James等等
windowalert(The property prop is myObject[prop]);
}盡管 forin 循環看起來像 VBScript 的 For EachNext 循環其實並不一樣JScript 的 forin 循環重復Jscript 對象所有的屬性VBScript 的 For EachNext 循環重復集合中的所有項目要循環 JScript 中的所有集合需要用 Enumerator 對象盡管某些對象(像 Internet 浏覽器中的那些)支持 VBScript 的 For EachNext 和 Jscript 的 forin 循環但多數對象並不都支持
使用 while 循環
while 循環相似於 for 循環其不同之處是 while 循環沒有內置的計數器或更新表達式如果希望控制語句或語句塊的循環執行需要不只是運行該代碼 n 次而是更復雜的規則用 while 循環下面的示例使用 Internet 浏覽器對象模型和 while 循環來詢問用戶一個簡單的問題
var x = ;
while ((x != ) && (x != null))
{
x = windowprompt(What is my favourite number? x);
}
if (x == null)
windowalert(You gave up!);
else
windowalert(Yep its the Ultimate Answer!);注意由於 while 循環沒有顯式的內置計數器變量因此比其他類型的循環更容易產生無限循環此外由於不易發現循環條件是在何時何地被更新的很容易編寫一個實際上從不更新條件的 while 循環因此在編寫 while 循環時應特別小心
同上面所提到的在 JScript 中還有 dowhile 循環與 while 循環相似不同處在於它總是至少運行一次因為是在循環的末尾檢查條件而不是在開頭例如上面的循環可以被改寫為
var x = ;
do
{x = windowprompt(What is my favourite number? x);} while ((x != ) && (x != null));
if (x == null)windowalert(You gave up!);
else windowalert(Yep its the Ultimate Answer!);使用 break 和 continue 語句
在 Microsoft Jscript 中當某些條件得到滿足時用 break 語句來中斷一個循環的運行(請注意也用 break 語句退出一個 switch 塊)如果是一個 for 或者 forin 循環在更新計數器變量時使用 continue 語句越過余下的代碼塊而直接跳到下一個循環中
下面的例子基於前面的示例用 break 和 continue 語句控制循環
var x = ;
do
{x = windowprompt(What is my favourite number? x);
// 判斷用戶是否選擇取消?如果是退出循環
if (x == null)
break;
// 是否輸入一個數?
if (Number(x) == x)
continue;
// 要求用戶只輸入數字
windowalert(Please only enter in numbers!);
} while (x != )
if (x == null)
windowalert(You gave up!);
else
windowalert(Yep its the Ultimate Answer!);
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25469.html