3.6 條件判斷語(yǔ)句
必備知識(shí):前面課程的學(xué)習(xí)
流程控制語(yǔ)句
在大多數(shù)編程語(yǔ)言中,主要存在著三種流程控制語(yǔ)句:順序語(yǔ)句返十、條件語(yǔ)句冒嫡、循環(huán)語(yǔ)句懂缕。我們之前課程中接觸到的語(yǔ)句都是順序語(yǔ)句,接下來(lái)兩節(jié)民鼓,將會(huì)講解條件判斷語(yǔ)句、循環(huán)語(yǔ)句。
語(yǔ)句塊
大多數(shù)程序都使用語(yǔ)句塊來(lái)給語(yǔ)句分組焕阿,這樣可以使語(yǔ)句的結(jié)構(gòu)清晰明了。我們使用一對(duì)花括號(hào)( {} )來(lái)分組語(yǔ)句塊首启,如下所示:
{
statement_1; statement_2;
statement_3;
...
statement_n;
}
涉及到語(yǔ)句塊暮屡,就存在著塊作用域的問(wèn)題。例如下面的代碼:
var x = 1;
{
var x = 2;
}
alert(x); // 輸出的結(jié)果為 2
這段代碼的輸出是2毅桃,這是因?yàn)?var x = 2 的作用范圍與 var x = 1 的作用范圍相同褒纲,在 C 語(yǔ)言或是 Java 語(yǔ)言中,同樣的代碼輸出的結(jié)果是1钥飞。
從 ECMAScript 6 開(kāi)始莺掠,使用 let 定義的變量是塊作用域的。
條件判斷語(yǔ)句
條件判斷語(yǔ)句指的是根據(jù)指定的條件所返回的結(jié)果(真或假)读宙,來(lái)執(zhí)行特定的語(yǔ)句彻秆。JavaScript 提供了兩種條件判斷語(yǔ)句:if...else 和 switch。
if 語(yǔ)句
當(dāng)一個(gè)邏輯條件為真结闸,用 if 語(yǔ)句執(zhí)行一個(gè)語(yǔ)句唇兑。當(dāng)這個(gè)條件為假,使用可選擇的else 從句來(lái)執(zhí)行這個(gè)語(yǔ)句桦锄。if 語(yǔ)句如下所示:
if (condition) {
statement_1;
}
else {
statement_2;
} //語(yǔ)句else可選
條件可以是任何返回結(jié)果是 true 或 false 的表達(dá)式扎附。如果條件表達(dá)式返回的是 true,statement_1 會(huì)被執(zhí)行结耀;否則留夜,statement_2 被執(zhí)行。statement_1 和 statement_2 可以是任何語(yǔ)句图甜,甚至你可以將另一個(gè) if 語(yǔ)句嵌套其中香伴。
你也可以組合語(yǔ)句通過(guò)使用 else if 來(lái)測(cè)試連續(xù)的多種條件判斷,就像下面這樣:
if (condition_1) {
statement_1;
}
else if (condition_2) {
statement_2;
}
// ... 可以有任意個(gè) else if
else if (condition_n_1) {
statement_n_1;
}
else {
statement_n;
}
注意:
下面這些值將被計(jì)算出 false:
- false
- undefined
- null
- 0
- NaN
- 空字符串 ("")
當(dāng)傳遞給條件語(yǔ)句時(shí)具则,所有其他值即纲,包括所有對(duì)象會(huì)被計(jì)算為 true 。
switch 語(yǔ)句
switch 語(yǔ)句允許一個(gè)程序求一個(gè)表達(dá)式的值并且嘗試去匹配表達(dá)式的值到一個(gè) case label博肋。如果匹配成功低斋,這個(gè)程序執(zhí)行相關(guān)的語(yǔ)句蜂厅。switch 語(yǔ)句如下所示:
switch (expression) {
case label_1:
statements_1
break;
case label_2:
statements_2
break;
...
default:
statements_def
break;
}
程序首先查找一個(gè)與 expression 匹配的 case 語(yǔ)句,然后將控制權(quán)轉(zhuǎn)移到該子句膊畴,執(zhí)行相關(guān)的語(yǔ)句掘猿。如果沒(méi)有匹配值, 程序會(huì)去找 default 語(yǔ)句唇跨,如果找到了稠通,控制權(quán)轉(zhuǎn)移到該子句,執(zhí)行相關(guān)的語(yǔ)句买猖。如果沒(méi)有找到 default改橘,程序會(huì)繼續(xù)執(zhí)行 switch 語(yǔ)句后面的語(yǔ)句。default 語(yǔ)句通常出現(xiàn)在 switch 語(yǔ)句里的最后面玉控,當(dāng)然這不是必須的飞主。
可選的 break 語(yǔ)句與每個(gè) case 語(yǔ)句相關(guān)聯(lián), 保證在匹配匹配的語(yǔ)句被執(zhí)行后程序可以跳出 switch 并且繼續(xù)執(zhí)行 switch 后面的語(yǔ)句高诺。如果不寫(xiě) break , 程序?qū)⒗^續(xù)執(zhí)行 switch 中的語(yǔ)句碌识。
在如下示例中, 如果 fruittype 等于 "Bananas", 程序匹配到對(duì)應(yīng) "Bananas" 的 case 語(yǔ)句,并執(zhí)行相關(guān)語(yǔ)句虱而。 當(dāng)執(zhí)行到 break 時(shí)筏餐,程序結(jié)束了 switch 并執(zhí)行 switch 后面的語(yǔ)句。 如果不寫(xiě) break 牡拇,那么程序?qū)?huì)執(zhí)行 case "Cherries" 下的語(yǔ)句魁瞪。
switch (fruittype) {
case "Oranges":
document.write("Oranges are $0.59 a pound.<br>");
break;
case "Apples":
document.write("Apples are $0.32 a pound.<br>");
break;
case "Bananas":
document.write("Bananas are $0.48 a pound.<br>");
break;
case "Cherries":
document.write("Cherries are $3.00 a pound.<br>");
break;
case "Mangoes":
case "Papayas":
document.write("Mangoes and papayas are $2.79 a pound.<br>");
break;
default:
document.write("Sorry, we are out of " + fruittype + ".<br>");
}
document.write("Is there anything else you'd like?<br>");