1 - 流程控制
1.1 流程控制概念
? 在一個(gè)程序執(zhí)行的過(guò)程中,各條代碼的執(zhí)行順序?qū)Τ绦虻慕Y(jié)果是有直接影響的奶赠。很多時(shí)候我們要通過(guò)控制代碼的執(zhí)行順序來(lái)實(shí)現(xiàn)我們要完成的功能鱼填。
? 簡(jiǎn)單理解:流程控制就是來(lái)控制代碼按照一定結(jié)構(gòu)順序來(lái)執(zhí)行
? 流程控制主要有三種結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)车柠、循環(huán)結(jié)構(gòu)
1.2 順序流程控制
?
1.3 分支流程控制
- 分支結(jié)構(gòu)
? JS 語(yǔ)言提供了兩種分支結(jié)構(gòu)語(yǔ)句:if 語(yǔ)句剔氏、switch 語(yǔ)句
-
if 語(yǔ)句
- 語(yǔ)法結(jié)構(gòu)
// 條件成立執(zhí)行代碼塑猖,否則什么也不做 if (條件表達(dá)式) { // 條件成立執(zhí)行的代碼語(yǔ)句 }
執(zhí)行思路: 如果 if 里面的條件表達(dá)式結(jié)果為真 true 則執(zhí)行大括號(hào)里面的 執(zhí)行語(yǔ)句
如果if 條件表達(dá)式結(jié)果為假 則不執(zhí)行大括號(hào)里面的語(yǔ)句 則執(zhí)行if 語(yǔ)句后面的代碼語(yǔ)句可以理解為一個(gè)行為竹祷,循環(huán)語(yǔ)句和分支語(yǔ)句就是典型的語(yǔ)句。一個(gè)程序由很多個(gè)語(yǔ)句組成羊苟,一般情況下塑陵,會(huì)分割成一個(gè)一個(gè)的語(yǔ)句。
- 執(zhí)行流程
-
if else語(yǔ)句(雙分支語(yǔ)句)
-
語(yǔ)法結(jié)構(gòu)
// 條件成立 執(zhí)行 if 里面代碼蜡励,否則執(zhí)行else 里面的代碼 if (條件表達(dá)式) { // [如果] 條件成立執(zhí)行的代碼 } else { // [否則] 執(zhí)行的代碼 }
執(zhí)行流程
-
- 判斷閏年案例
<script>
// 算法:能被4整除且不能整除100的為閏年(如2004年就是閏年令花,1901年不是閏年)或者能夠被 400 整除的就是閏年
// 彈出prompt 輸入框,讓用戶輸入年份凉倚,把這個(gè)值取過(guò)來(lái)保存到變量中
// 使用 if 語(yǔ)句來(lái)判斷是否是閏年兼都,如果是閏年,就執(zhí)行 if 大括號(hào)里面的輸出語(yǔ)句稽寒,否則就執(zhí)行 else里面的輸出語(yǔ)句
// 一定要注意里面的且 && 還有或者 || 的寫(xiě)法扮碧,同時(shí)注意判斷整除的方法是取余為 0
var year = prompt('請(qǐng)您輸入年份:');
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
alert('您輸入的年份是閏年');
} else {
alert('您輸入的年份是平年');
}
</script>
-
if else if 語(yǔ)句(多分支語(yǔ)句)
-
語(yǔ)法結(jié)構(gòu)
// 適合于檢查多重條件。 if (條件表達(dá)式1) { 語(yǔ)句1; } else if (條件表達(dá)式2) { 語(yǔ)句2慎王; } else if (條件表達(dá)式3) { 語(yǔ)句3蚓土; .... } else { // 上述條件都不成立執(zhí)行此處代碼 }
-
執(zhí)行邏輯
如果條件表達(dá)式1 滿足就執(zhí)行 語(yǔ)句1,執(zhí)行完畢后,退出整個(gè)if 分支語(yǔ)句
如果條件表達(dá)式1 不滿足赖淤,則判斷條件表達(dá)式2 滿足的話蜀漆,執(zhí)行語(yǔ)句2 以此類推
如果上面的所有條件表達(dá)式都不成立,則執(zhí)行else 里面的語(yǔ)句
注意點(diǎn)
(1) 多分支語(yǔ)句還是多選1 最后只能有一個(gè)語(yǔ)句執(zhí)行
(2) else if 里面的條件理論上是可以任意多個(gè)的
(3) else if 中間有個(gè)空格
-
判斷成績(jī)案例
<script>
// 偽代碼 按照從大到小判斷的思路
// 彈出prompt輸入框咱旱,讓用戶輸入分?jǐn)?shù)(score)确丢,把這個(gè)值取過(guò)來(lái)保存到變量中
// 使用多分支 if else if 語(yǔ)句來(lái)分別判斷輸出不同的值
var score = prompt('請(qǐng)您輸入分?jǐn)?shù):');
if (score >= 90) {
alert('寶貝,你是我的驕傲');
} else if (score >= 80) {
alert('寶貝莽龟,你已經(jīng)很出色了');
} else if (score >= 70) {
alert('你要繼續(xù)加油嘍');
} else if (score >= 60) {
alert('孩子蠕嫁,你很危險(xiǎn)');
} else {
alert('熊孩子,我不想和你說(shuō)話毯盈,我只想用鞭子和你說(shuō)話');
}
</script>
1.4 三元表達(dá)式
-
語(yǔ)法結(jié)構(gòu)
表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3;
-
執(zhí)行思路
- 如果表達(dá)式1為 true 剃毒,則返回表達(dá)式2的值,如果表達(dá)式1為 false搂赋,則返回表達(dá)式3的值
- 簡(jiǎn)單理解: 就類似于 if else (雙分支) 的簡(jiǎn)寫(xiě)
數(shù)字補(bǔ)0案例
<script>
// 用戶輸入0~59之間的一個(gè)數(shù)字
// 如果數(shù)字小于10赘阀,則在這個(gè)數(shù)字前面補(bǔ)0,(加0 拼接) 否則 不做操作
// 用一個(gè)變量接受這個(gè)返回值,輸出
var time = prompt('請(qǐng)您輸入一個(gè) 0 ~ 59 之間的一個(gè)數(shù)字');
// 三元表達(dá)式 表達(dá)式 脑奠? 表達(dá)式1 :表達(dá)式2
var result = time < 10 ? '0' + time : time; // 把返回值賦值給一個(gè)變量
alert(result);
</script>
1.5 switch分支流程控制
- 語(yǔ)法結(jié)構(gòu)
switch( 表達(dá)式 ){
case value1:
// 表達(dá)式 等于 value1 時(shí)要執(zhí)行的代碼
break;
case value2:
// 表達(dá)式 等于 value2 時(shí)要執(zhí)行的代碼
break;
default:
// 表達(dá)式 不等于任何一個(gè) value 時(shí)要執(zhí)行的代碼
}
關(guān)鍵字 switch 后面括號(hào)內(nèi)可以是表達(dá)式或值基公, 通常是一個(gè)變量
關(guān)鍵字 case , 后跟一個(gè)選項(xiàng)的表達(dá)式或值,后面跟一個(gè)冒號(hào)
switch 表達(dá)式的值會(huì)與結(jié)構(gòu)中的 case 的值做比較
如果存在匹配全等(===) 宋欺,則與該 case 關(guān)聯(lián)的代碼塊會(huì)被執(zhí)行轰豆,并在遇到 break 時(shí)停止,整個(gè) switch 語(yǔ)句代碼執(zhí)行結(jié)束
-
如果所有的 case 的值都和表達(dá)式的值不匹配齿诞,則執(zhí)行 default 里的代碼
注意: 執(zhí)行case 里面的語(yǔ)句時(shí)酸休,如果沒(méi)有break,則繼續(xù)執(zhí)行下一個(gè)case里面的語(yǔ)句祷杈。
-
switch 語(yǔ)句和 if else if 語(yǔ)句的區(qū)別
- 一般情況下斑司,它們兩個(gè)語(yǔ)句可以相互替換
- switch...case 語(yǔ)句通常處理 case為比較確定值的情況, 而 if…else…語(yǔ)句更加靈活但汞,常用于范圍判斷(大于宿刮、等于某個(gè)范圍)
- switch 語(yǔ)句進(jìn)行條件判斷后直接執(zhí)行到程序的條件語(yǔ)句,效率更高私蕾。而if…else 語(yǔ)句有幾種條件僵缺,就得判斷多少次。
- 當(dāng)分支比較少時(shí)踩叭,if… else語(yǔ)句的執(zhí)行效率比 switch語(yǔ)句高磕潮。
- 當(dāng)分支比較多時(shí),switch語(yǔ)句的執(zhí)行效率比較高,而且結(jié)構(gòu)更清晰揉抵。