大家好,我們今天接著前面的講,前面已經大概了講了一下運算符,今天的任務主要就是講解邏輯條件分支,循環。
我們先就來模擬一個邏輯塊,就用我們常接觸到的買車票來說吧,車票的價格對不同的人價格是有差別的,但是我們都是一樣的去執行買票這個行為,我們就可以把買票寫成一個函數BuyTicket
//代码 function BuyTicket(){ console.log("请付款200元"); }
大家看到了這個函數體,其實是有缺陷的,我們每個人去買票的時候,都是執行這一個函數,如果是軍人,或者是學生,這個函數就不適用了,他們的折扣就沒有辦法使用了,我們只能多寫一個函數來解決這樣的問題,然後,我們的javascript語言已經給我們提供了分支語句,我們就可以輕鬆的解決這樣的問題了,我們可以把函數給修改一下,我們來看看接下來修改後的程式碼
function BuyTicket(identity){ if(identity == "学生"){ console.log("请付款100元"); } if(identity == "军人"){ console.log("请付款150元"); } if(identity == "普通人"){ console.log("请付款200元"); } } //模拟3种人去买票 BuyTicket("学生"); BuyTicket("军人"); BuyTicket("普通人");
這樣使用是不是比前面的寫法更科學,後面我還會慢慢升級,慢慢地大家就會明白程式的可愛之處。
透過上面的範例,我們不難看出,這樣一個函數,就可以解決分支的問題,我們現在來講解一下if分支語法
if(条件){ //执行语句 }
條件就是我們前面講到的,非空對象,非未定義對象,布林值true,非0數字,所有字串,我們函數體裡面是用的== 比較符來運算後得到一個布林值來進行的判斷,這也是我們常用到的一種方式,我們同樣可以用其他值來作為條件,再上一張圖片,讓大家來理解一下
A處:條件全部成立,所以都印出了「執行」了幾個字;B處:條件都不是if條件的合格值,所以沒有執行。註:這裡我們都是使用的明值,有時候我們就會使用運算後的回傳值,就如前面的BuyTicket函數中所使用的== 運算,傳回的如果是true,就執行,如果傳回的是false,肯定就不執行,我們每次執行BuyTicket時,所傳入的值,就只能符合一個條件。
接下來,我們來學習完整的if分支
//第一种,两个分支 if(条件){ //执行 }else{ //执行 }
直接上圖,一下就明白了
A處:執行了前面的程式碼;B處條件不合格,所以就執行了else區塊裡面的語句。很簡單,不多作解釋。
兩個分支的情況,就是總是會執行二者之一,不會兩個同時執行
//第二种,多个分支 if(条件){ //执行 }else if(条件){ //执行 }else if(条件){ //执行 }…else if(条件){ //执行 }else{ //执行 }
多個分支的情況,總是只執行其中之一,如果執行其中的某一個分支後,就不會再繼續下面的條件比較,是一種效率比較高的方式,如果單純地去寫if塊,就會像上面的BuyTicket函數一樣,那是一個效率很低的寫法,三個if塊都會去比較所以,我們可以改造一下BuyTicket函數
//代码 funciton BuyTicket(identity){ if("学生"){ console.log("请付款100元"); }else if("军人"){ console.log("请付款150元"); }else{ console.log("请付款200元"); } }
這種寫法就比較科學了,執行的效果也跟前面一樣,這樣寫的好處就是執行效率高了,條件逐一匹配,如果條件合格就執行,而不會再去匹配其他的條件塊,這樣效率就比前面寫的函數程式碼優秀,然而,還有一種多分支的替換寫法,switch結構體,先看文法
switch(表达式){ case 常量表达式1: //执行 break; case 常量表达式1: //执行 break; case 常量表达式1: //执行 break; default: //执行 break; }
從上往下執行的過程,就是,用表達式與下面的常數表達式逐個匹配,如果匹配上了,就執行裡面的語句,記得,在每個case塊後面加上break關鍵字,不然,會依序執行後面的case區塊裡面的語句,直到遇到break為止,所以這個特性我們也可以利用起來,在適當的情況下,我們也會不寫break關鍵字。好了,我們先用switch結構體來修改一下前面的BuyTicket函數
function BuyTicket(identity){ switch(identity){ case "学生": console.log("请付款100元"); break; case "军人": console.log("请付款150元"); break; case "普通人": console.log("请付款200元"); break; default: console.log("请出示身份证"); } }
default區塊就是當一個表達式都沒有符合上情況,我們預設執行這一塊的程式碼,因為這也是最後一個程式碼區塊,所以也可以省略break關鍵字
總結一下,今天,只說了條件分支之類的知識,if , if--else , if--else if--else , switch就這幾個條件分支語句塊,每天我也只能抽出一定的時間來寫,篇幅有限,下一篇就是寫循環了,好了,大家先去消化了,下一篇我們繼續。