JavaScript的分支結構(switch,if..else)
if else是所有程式語言裡都有的功能,它使得程式具有簡單的判斷能力。
在介紹if之前,讓我們先來了解一下布林值這個概念。
布林(Bool)值
變數可以用來儲存布林值。布林值的作用就是用來表示“真的假的”。所以布林值其實只有兩種取值:真(true)和假(false)。
if else結構
其實“if…else”的意思和字面意思是一樣的,就是“如果”、“否則”。語法結構如圖:
使用if的例子
1 2 3 4 5 6 7 |
<script type=“text/JavaScript”>
Var hobby = “VbScript”;
if
(hobby == “JavaScript”)
{
document.write(
"有發展"
);
}
</script>
|
我們來解釋一下這段程式碼。首先是一個“if”,它後面緊跟著一個括號,括號裡則是一個條件,確切地說是一個布林值。當條件成立的時候,這個值是true,“{}”裡的語句將會得到執行;否則這個值是flase,“{}”裡的語句將被忽略。
具體到我們的例子,因為hobby 變數的值是“VbScript”,所以不做回答。如果hobby變數的值是“JavaScript”,則回答“有發展”。注意“==”這個符號,這個符號用來判斷左右兩邊是否相等。
如果你的愛好不是JavaScript,那麼沒有任何輸出。如果你希望它能對這種情況做出反應,我們可以請else來幫忙,看下面的程式碼:
1 2 3 4 5 6 7 8 9 10 |
<script type=“text/JavaScript”>
var
hobby =
"JavaScript"
if
(hobby ==
"JavaScript"
)
{
document.write(
"有發展"
);
}
else
//如果愛好不是JavaScript
{
document.write(
"沒有評價……"
);
}
</script>
|
上面的程式碼用到了“else”,它會給if新增一種“否則”的狀態。當hobby不是“JavaScript”的時候,它會表明“沒有評價”。
if else巢狀
如果想做更多的判斷,可以用if的巢狀,巢狀結構圖:
看下面的程式碼。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<script type=“text/JavaScript”>
var
hobby =
"JavaScript"
if
( hobby ==
"JavaScript"
)
{
document.write(
"有發展"
);
}
else
if
( hobby ==
"football"
)
//如果愛好是足球。
//注意:這個if是巢狀在上一個if else中的else中的
{
document.write(
"我X"
);
}
else
//既不是JavaScript又不是足球
{
document.write(
"沒有評價……"
);
}
</script>
|
第二個if只有在第一個if的條件不成立的時候才有機會執行。
Switch語句
當有很多種選項的時候,switch比if else使用更方便。
上一節我們已經看到,利用if else可以讓程式具有基本的判斷能力,而使用巢狀的if else則可以讓程式對多種情況進行判斷。但是當情況的種類比較多的時候,使用switch語句將更加合適。語法結構圖:
語法定義:
switch(表示式)
{
case 取值1:
語句塊1;
break;
case 取值2:
語句塊2;
break;
case 取值n:
語句塊n;
break;
defaule:
語句塊n+1;
break;
}
比如要實現如下功能的程式:輸入一個學生的考試成績,我們按照每十分一個等級將成績分等,程式將根據成績的等級做出不同的評價。
很明顯,用if else可以實現這樣的程式,但是程式碼會很複雜。而如果使用switch語句,程式碼則會簡單一些,首先來看一下思路,再把它翻譯成JavaScript。
思路:
-
將分數轉化為特定等級以便於switch處理。
-
判斷分數屬於哪種等級。
-
據分數等級做出評價:例如低於60給出掛科評價。
翻譯成JavaScript就是如下程式碼(注意註釋):
<script type="text/JavaScript">
//首先,我們用score變數來儲存分數,假設為65
var score = 65;
//用分數除以10,parseInt的作用是把它轉換為整數,
//暫時不用深究,()內最後的結果為6
switch (parseInt(score / 10)) {
//switch開始實現判斷過程,case 6得到滿足
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
//根據不同的等級做出不同的行為。
//冒號後面的語句就是行為
//case0到5的行為都是下面這個語句
degree = "恭喜你,又掛了!";
break;
case 6:
degree = "勉強及格";
break;
case 7:
degree = "湊合,湊合"
break;
case 8:
degree = "不錯,不錯";
break;
case 9:
case 10:
degree = "高手啊,佩服佩服";
}//end of switch
</script>
記得在每個case所執行的語句裡新增上一個break語句。為了理解break的作用,我們來看看如果沒有break會怎麼樣:
<script type="text/JavaScript">
switch (parseInt(score / 10)) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
degree = "恭喜你,又掛了!";
case 6:
degree = "勉強及格";
case 7:
degree = "湊合,湊合"
case 8:
degree = "8錯,8錯";
case 9:
case 10:
degree = "高手啊,佩服佩服";
}//end of switch
</script>
在上面的程式碼中,如果成績是50分,那麼score/10就是5,則case 5後面的語句將會得到執行,同樣,case6、7等等後面的語句都會得到執行。也就是說,我們會得到 恭喜你,又掛了!勉強及格湊合,湊合8錯,8錯高手啊,佩服佩服 這樣沒有意義的結果。這就是swtitch語句的執行邏輯,當發現某個case滿足後,該switch中在該case後的所有語句都會得到執行。第一個例子中的break就是為了讓switch”停下來“。