學(xué)習(xí)javascript(6)
來源:易賢網(wǎng) 閱讀:661 次 日期:2014-09-09 11:31:18
溫馨提示:易賢網(wǎng)小編為您整理了“學(xué)習(xí)javascript(6)”,方便廣大網(wǎng)友查閱!

控制程序的流程

Jscript 腳本中的語(yǔ)句一般是按照寫的順序來運(yùn)行的。這種運(yùn)行稱為順序運(yùn)行,是程序流的默認(rèn)方向。

與順序運(yùn)行不同,另一種運(yùn)行將程序流轉(zhuǎn)換到腳本的另外的部分。也就是,不按順序運(yùn)行下一條語(yǔ)句,而是運(yùn)行另外的語(yǔ)句。

要使腳本可用,該控制的轉(zhuǎn)換必須以邏輯方式執(zhí)行。程序控制的轉(zhuǎn)換是基于一個(gè)“決定”,這個(gè)“決定”結(jié)果是真或假(返回 Boolean 型 true 或 false)。 創(chuàng)建一個(gè)表達(dá)式,然后測(cè)試其是否為真。主要有兩種程序結(jié)構(gòu)實(shí)現(xiàn)本功能。

第一種是選擇結(jié)構(gòu)。用來指明兩種程序流方向,在程序中創(chuàng)建一個(gè)交叉點(diǎn)(像岔路)。在 Jscript 中有四種選擇結(jié)構(gòu)可用。

單一選擇結(jié)構(gòu)(if),

二路選擇結(jié)構(gòu)(if/else),

內(nèi)聯(lián)三元運(yùn)算符 ?:

多路選擇結(jié)構(gòu)(switch)。

第二種類型的程序控制結(jié)構(gòu)是循環(huán)結(jié)構(gòu)。使用循環(huán)結(jié)構(gòu)來指明當(dāng)某些條件保持為真時(shí)要重復(fù)的動(dòng)作。當(dāng)控制語(yǔ)句的條件得到滿足時(shí)(通常在某些迭代的特定數(shù)字后),控制跳過循環(huán)結(jié)構(gòu)傳遞到下條語(yǔ)句。在 Jscript 中有四種循環(huán)結(jié)構(gòu)可用。

在循環(huán)的開頭測(cè)試表達(dá)式(while),

在循環(huán)的末尾測(cè)試表達(dá)式(do/while),

對(duì)對(duì)象的每個(gè)屬性都進(jìn)行操作(for/in),

由計(jì)數(shù)器控制的循環(huán)(for)。

通過嵌套和堆棧選擇、循環(huán)控制結(jié)構(gòu),可以創(chuàng)建相當(dāng)復(fù)雜的腳本。

第三種形式的結(jié)構(gòu)程序流由意外處理給出,本文檔不作討論。

使用條件語(yǔ)句

JScript 支持 if 和 if...else 條件語(yǔ)句。在 if 語(yǔ)句中將測(cè)試一個(gè)條件,如果該條件滿足測(cè)試,執(zhí)行相關(guān)的 JScript 編碼。在 if...else 語(yǔ)句中,如果條件不滿足測(cè)試,則將執(zhí)行不同的代碼。最簡(jiǎn)單的 if 語(yǔ)句格式可以在一行中寫完,不過更常見的是多行的 if 和 if...else 語(yǔ)句。

下述示例演示了使用 if 和 if...else 語(yǔ)句的各種可能的語(yǔ)法。第一個(gè)示例演示了最簡(jiǎn)單的布爾測(cè)試。當(dāng)(且僅當(dāng))括號(hào)之間的項(xiàng)的值為(或者可被強(qiáng)制轉(zhuǎn)換為) true 時(shí),if 后續(xù)的語(yǔ)句或語(yǔ)句塊才會(huì)被執(zhí)行。

// smash() 函數(shù)是在該代碼的其他地方定義的。

// 布爾測(cè)試,看 newShip 是否為 true。

if (newShip)

smash(champagneBottle,bow);

// 在本示例中,除非兩個(gè)條件都為真,否則該測(cè)試將不會(huì)被滿足。

if (rind.color == "deep yellow " && rind.texture == "large and small wrinkles")

{

theResponse = ("Is it a Crenshaw melon?");

}

// 在本示例中,只要任何一個(gè)條件為真,則測(cè)試即會(huì)滿足。

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!");

}

條件運(yùn)算符

JScript 也支持隱式的條件格式。該格式在要測(cè)試的條件后使用一個(gè)問號(hào)(而不是在條件前的 if )。它也指定兩個(gè)可選項(xiàng),一個(gè)在滿足條件時(shí)使用,另一個(gè)在條件不滿足時(shí)使用。這兩個(gè)選擇項(xiàng)之間必須用一個(gè)冒號(hào)隔開。

var hours = "";

// 下面的代碼指定 hours 是包含 theHour 的內(nèi)容,

// 還是包含 theHour - 12 的內(nèi)容。

hours += (theHour >= 12) ? " PM" : " AM";

如果要一起測(cè)試多個(gè)條件,并且知道某個(gè)條件比其他條件更可能滿足或不滿足測(cè)試,可以使用稱為“短路計(jì)算”的特性來加速腳本的運(yùn)行速度。當(dāng) JScript 計(jì)算邏輯表達(dá)式時(shí),只計(jì)算要得到結(jié)果所需的子表達(dá)式。

例如,如果有一個(gè)“與”表達(dá)式,如 ((x == 123) && (y == 42)),Jscript 首先檢查 x 是否為 123。如果不是,即使 y 等于 42,整個(gè)表達(dá)式的值也不可能為 true。因此,并不對(duì) y 作測(cè)試,Jscript 返回 false 值。

類似地,如果多個(gè)條件中只要有一個(gè)為真(使用 || 運(yùn)算符),則當(dāng)任何一個(gè)條件滿足該測(cè)試時(shí)測(cè)試則停止。如果要測(cè)試的條件包括函數(shù)調(diào)用或其他復(fù)合表達(dá)式,這種處理方式就有效。出于此種想法,寫 OR 表達(dá)式時(shí),先寫最有可能為 true 的條件。寫 AND 表達(dá)式時(shí),先寫最有可能為 false 的條件。

以這種方式設(shè)計(jì)腳本的好處的一個(gè)示例是:在下例中如果 runfirst() 返回 0 或 false, 則不會(huì)運(yùn)行 runsecond()。

if ((runfirst() == 0) || (runsecond() == 0)) {

// 若干代碼。

}

使用循環(huán)

有多種方式來重復(fù)執(zhí)行一條語(yǔ)句或語(yǔ)句塊。通常重復(fù)執(zhí)行被稱為循環(huán)或重復(fù)。重復(fù)只是循環(huán)的一個(gè)運(yùn)行。典型情況是用一個(gè)變量測(cè)試來進(jìn)行控制,每執(zhí)行一次循環(huán)變量的取值都會(huì)更改。JScript 支持四種循環(huán): for 循環(huán)、 for...in 循環(huán)、 while 循環(huán)、 do...while 循環(huán)。

使用 for 循環(huán)

for 語(yǔ)句指定了一個(gè)計(jì)數(shù)器變量,一個(gè)測(cè)試條件,以及更新該計(jì)數(shù)器的操作。在每次循環(huán)的重復(fù)之前,都將測(cè)試該條件。如果測(cè)試成功,將運(yùn)行循環(huán)中的代碼。如果測(cè)試不成功,不運(yùn)循環(huán)中的代碼,程序繼續(xù)運(yùn)行緊跟在循環(huán)后的第一行代碼。在執(zhí)行該循環(huán)后,計(jì)算機(jī)變量將在下一次循環(huán)之前被更新。

如果循環(huán)條件永不會(huì)滿足,則不執(zhí)行該循環(huán)。如果測(cè)試條件始終滿足,則將導(dǎo)致無限循環(huán)。在有些情況下,前者可能是合乎需要的,而后者幾乎沒有用處,因此在編寫循環(huán)條件時(shí)一定要注意。

/*

更新表達(dá)式 (下例中的 "icount++")將在循環(huán)結(jié)束時(shí)被執(zhí)行,即在構(gòu)成循環(huán)主體的語(yǔ)句塊被執(zhí)行后,在測(cè)試條件之前。

*/

var howFar = 10; // 將循環(huán)次數(shù)限制為 10。

var sum = new Array(howFar); // 創(chuàng)建一個(gè)稱為 sum 并具有 10 個(gè)成員的數(shù)組,這 10 個(gè)成員從 0 到 9。

var theSum = 0;

sum[0] = 0;

for(var icount = 0; icount < howFar; icount++) { // 在本例中將從 0 到 9 進(jìn)行計(jì)數(shù)。

theSum += icount;

sum[icount] = theSum;

}

var newSum = 0;

for(var icount = 0; icount > howFar; icount++) { // 該循環(huán)根本不會(huì)被執(zhí)行,因?yàn)?icount 不大于 howFar。

newSum += icount;

}

var sum = 0;

for(var icount = 0; icount >= 0; icount++) { // 這是一個(gè)無限循環(huán)。

sum += icount;

}

使用 for...in 循環(huán)

JScript 提供了一種特別的循環(huán)方式來遍歷一個(gè)對(duì)象的所有用戶定義的屬性或者一個(gè)數(shù)組的所有元素。for...in 循環(huán)中的循環(huán)計(jì)數(shù)器是一個(gè)字符串,而不是數(shù)字。它包含當(dāng)前屬性的名稱或者當(dāng)前數(shù)組元素的下標(biāo)。

下面的代碼范例應(yīng)在 Internet 瀏覽器中運(yùn)行,因?yàn)樗褂?alert 方法,該方法不屬于 Jscript。

// 創(chuàng)建具有某些屬性的對(duì)象

var myObject = new Object();

myObject.name = "James";

myObject.age = "22";

myObject.phone = "555 1234";

// 枚舉(循環(huán))對(duì)象的所有屬性

for (prop in myObject)

{

// 顯示 "The property 'name' is James",等等。

window.alert("The property '" + prop + "' is " + myObject[prop]);

}

盡管 for...in 循環(huán)看起來像 VBScript 的 For Each...Next 循環(huán),其實(shí)并不一樣。JScript 的 for...in 循環(huán)重復(fù)Jscript 對(duì)象所有的屬性。VBScript 的 For Each...Next 循環(huán)重復(fù)集合中的所有項(xiàng)目。要循環(huán) JScript 中的所有集合,需要用 Enumerator 對(duì)象。盡管某些對(duì)象(像 Internet 瀏覽器中的那些)支持 VBScript 的 For Each...Next 和 Jscript 的 for...in 循環(huán),但多數(shù)對(duì)象并不都支持。

使用 while 循環(huán)

while 循環(huán)相似于 for 循環(huán)。其不同之處是 while 循環(huán)沒有內(nèi)置的計(jì)數(shù)器或更新表達(dá)式。如果希望控制語(yǔ)句或語(yǔ)句塊的循環(huán)執(zhí)行,需要不只是“運(yùn)行該代碼 n 次”,而是更復(fù)雜的規(guī)則,用 while 循環(huán)。下面的示例使用 Internet 瀏覽器對(duì)象模型和 while 循環(huán)來詢問用戶一個(gè)簡(jiǎn)單的問題。

var x = 0;

while ((x != 42) && (x != null))

{

x = window.prompt("What is my favourite number?", x);

}

if (x == null)

window.alert("You gave up!");

else

window.alert("Yep - it's the Ultimate Answer!");

注意 由于 while 循環(huán)沒有顯式的內(nèi)置計(jì)數(shù)器變量,因此比其他類型的循環(huán)更容易產(chǎn)生無限循環(huán)。此外,由于不易發(fā)現(xiàn)循環(huán)條件是在何時(shí)何地被更新的,很容易編寫一個(gè)實(shí)際上從不更新條件的 while 循環(huán)。因此在編寫 while 循環(huán)時(shí)應(yīng)特別小心。

同上面所提到的,在 JScript 中還有 do...while 循環(huán)與 while 循環(huán)相似,不同處在于它總是至少運(yùn)行一次,因?yàn)槭窃谘h(huán)的末尾檢查條件,而不是在開頭。例如,上面的循環(huán)可以被改寫為:

var x = 0;

do

{

x = window.prompt("What is my favourite number?", x);

} while ((x != 42) && (x != null));

if (x == null)

window.alert("You gave up!");

else

window.alert("Yep - it's the Ultimate Answer!");

使用 break 和 continue 語(yǔ)句

在 Microsoft Jscript 中當(dāng)某些條件得到滿足時(shí),用 break 語(yǔ)句來中斷一個(gè)循環(huán)的運(yùn)行。(請(qǐng)注意,也用 break 語(yǔ)句退出一個(gè) switch 塊。)。如果是一個(gè) for 或者 for...in 循環(huán),在更新計(jì)數(shù)器變量時(shí)使用 continue 語(yǔ)句越過余下的代碼塊而直接跳到下一個(gè)循環(huán)中。

下面的例子基于前面的示例用 break 和 continue 語(yǔ)句控制循環(huán)。

var x = 0;

do

{

x = window.prompt("What is my favourite number?", x);

// 判斷用戶是否選擇取消?如果是,退出循環(huán)。

if (x == null)

break;

// 是否輸入一個(gè)數(shù)?

// 如果是則無需要求輸入一個(gè)數(shù)。

if (Number(x) == x)

continue;

// 要求用戶只輸入數(shù)字。

window.alert("Please only enter in numbers!");

} while (x != 42)

if (x == null)

window.alert("You gave up!");

else

window.alert("Yep - it's the Ultimate Answer!");

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:學(xué)習(xí)javascript(6)
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)