iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
Modern Web

我的JavaScript日常系列 第 9

JavaScript Day 9. if、else if、if包if

if

當條件成立的時候會執行 if 陳述式裡的程式,而不成立時則執行另外一個陳述式。if 單從字面上來看,他有「如果」的意思,以 JavaScript 來說,在使用上也很符合「如果」的語意,以下我直接給予一個簡單日常的情境:

小華他想出門,但他不確定自己的錢包有沒有錢,於是他想打開錢包看看還有多少錢。
如果他有 100 元以上,就吃 80 元的牛肉麵;如果沒有 100 元,那就不吃了。
最後小華想計算自己還剩下多少錢。

let wellet = 0;
wallet += 130;
if(wellet >= 100) {
	wellet -= 80;
} else {
	wellet -= 0;
}
console.log(`錢包還剩下${wellet}`); // 50

從上面範例可以看到 if 在 JavaScript 裡面的定位,也是很貼近語意的使用方式。

當 () 為 true 的時候,才執行大括號裡面的語句,如果是 false 則跳過整個 if 區塊。

else if

當情境上有多個條件,需要呈現多種判斷結果的時候,可以使用 else if,情境範例如下:

小華他的習慣是:

  1. 如果沒有下雨,就不會帶雨具
  2. 如果下毛毛雨,他會帶輕便雨衣
  3. 假使下普通的雨,他會帶折傘
  4. 如果颱風天豪雨,他會帶長傘
let todayWeater = "毛毛雨";

if (todayWeater == "毛毛雨") {
    console.log("小華穿輕便雨衣");
}else if (todayWeater == "普通的雨") {
    console.log("小華會帶折傘");
}else if (todayWeater == "颱風天豪雨") {
    console.log("小華會帶長傘");
}
else {
    console.log("就不會帶雨具");
}

ifelse 只能有一個,else if 可以有好幾組。

if 包 if

這個模式則是當 if 的條件裡面又必須有另一個條件的時候會使用到,語意上比較類似「如果他今天.....然後如果他又.....」,最後會呈現一個曹狀結構,來看範例:

腰圍指數測量
男生腰圍大於 90 為過胖
女生腰圍大於 80 為過胖

  1. 判斷是男生還是女生
  2. 判斷男生是否超過 90
    判斷女生是否超過 80
let sex = "female";
let cm = 70;

if(sex=="female") {
    console.log("女生");
    if(cm>=80) {
        console.log("體型肥胖");
    }else {
        console.log("體型正常");
    }
}else if (sex=="male"){
    console.log("男生");
}else {
    console.log("無法解讀");
}

以上範例可以看到必須判斷性別後,再次判斷體重是否在正常值,因此寫的方式也與上面兩種不太一樣了。

下面再給一個範例,裡面有的條件又更複雜了:

1.小法鬥每天固定吃 2 餐
2.法鬥標準體重為 12KG,所以只要體重超過 12KG ,一天就只吃 1 餐
3.體重低於 12KG 就恢復吃兩餐
4.體重低於 10KG 就吃 3 餐

let dogEatNum = 2;
let dogWeight = 12;

if(dogWeight >= 13) {
    console.log("一天只吃一餐");
    if(dogWeight >= 15) {
        console.log("就醫減重");
    }
}else if(dogWeight <= 12 && dogWeight >= 10) {
    console.log("正常吃兩餐");
}else if(dogWeight <= 10 && dogWeight >= 8) {
    console.log("一天吃三餐,增加肌肉量");
}else {
    console.log("無法判定");
}

透過 if 就可以替程式做出一些小小的判斷,其實是一件很有趣的事,在不停的自己塑造情境並運行的過程,也是不斷加深自己對 if 的熟悉度。


上一篇
JavaScript Day 8. 淺談 Function-操作實例
下一篇
JavaScript Day 10. 陣列
系列文
我的JavaScript日常31

尚未有邦友留言

立即登入留言