Skip to content
This page is a draft. It may be incomplete or contain inaccuracies. If you have any comment, please feel free to leave some feedback!

if และ else ​

จากโปรเจกต์ที่แล้ว เราได้ลองเล่นกับ if กับ else กันดูไปแล้ว

ในตอนนีี้ เราจะมาเรียนรู้โครงสร้างของ if กับ else กัน

js
if (เงื่อนไข) {
  // โค้ดที่จะทำงานถ้าเงื่อนไขเป็นจริง
} else {
  // โค้ดที่จะทำงานถ้าเงื่อนไขเป็นเท็จ
}

การใช้ if ซ้อนกัน ​

  • เวลาเราเขียนโปรแกรม เงื่อนไขของเราอาจจะซับซ้อนมากกว่าแค่สองเส้นทาง

  • เราสามารถเอา if ซ้อนกันได้ โดยเราจะเขียนเงื่อนไขที่ซ้อนกันได้เท่าที่เราต้องการ

ตัวอย่าง: โปรแกรมคำนวณเกรด ​

  • ผมจะสร้างโปรแกรมที่คำนวณเกรดของนักเรียน โดยโปรแกรมจะรับคะแนนเข้ามา และแสดงเกรดออกมา โดยใช้ตารางเกรดดังนี้

    คะแนนเงื่อนไขเกรด
    80-100คะแนน ≥ 80A
    70-7970 ≤ คะแนน < 80B
    60-6960 ≤ คะแนน < 70C
    50-5950 ≤ คะแนน < 60D
    0-49คะแนน < 50F
  • ตัวอย่าง:

    index.html

    ลองเล่นกับตัวอย่างข้างบนดู

    1. ใส่คะแนน 100 แล้วกด Calculate grade → ควรได้เกรด A
    2. ใส่คะแนน 90 แล้วกด Calculate grade → ควรได้เกรด A
    3. ใส่คะแนน 80 แล้วกด Calculate grade → ควรได้เกรด A
    4. ใส่คะแนน 79 แล้วกด Calculate grade → ควรได้เกรด B
    5. ใส่คะแนน 70 แล้วกด Calculate grade → ควรได้เกรด B
    6. ใส่คะแนน 69 แล้วกด Calculate grade → ควรได้เกรด C
    7. ใส่คะแนน 60 แล้วกด Calculate grade → ควรได้เกรด C
    8. ใส่คะแนน 59 แล้วกด Calculate grade → ควรได้เกรด D
    9. ใส่คะแนน 50 แล้วกด Calculate grade → ควรได้เกรด D
    10. ใส่คะแนน 49 แล้วกด Calculate grade → ควรได้เกรด F
    11. ใส่คะแนน 0 แล้วกด Calculate grade → ควรได้เกรด F
  • เขียนโปรแกรมดังนี้

    html
    Your score:
    <input id="scoreInput" value="100" type="number" max="100" min="0" />
    <input id="calculateGrade" value="Calculate grade" type="button" />
    
    <script>
      let scoreInput = document.getElementById('scoreInput')
      let calculateGrade = document.getElementById('calculateGrade')
    
      calculateGrade.onclick = () => {
        let score = Number(scoreInput.value)
        let grade
        if (score >= 80) {
          grade = 'A'
        } else {
          if (score >= 70) {
            grade = 'B'
          } else {
            if (score >= 60) {
              grade = 'C'
            } else {
              if (score >= 50) {
                grade = 'D'
              } else {
                grade = 'F'
              }
            }
          }
        }
        alert('Your grade is ' + grade)
      }
    </script>

    การลดเงื่อนไขซ้ำซ้อน

    เงื่อนไขของเกรด B คือ “70 ≤ คะแนน < 80” แต่ในโค้ด บรรทัดที่ 15 (ซึ่งกำหนดเงื่อนไขของเกรด B เอาไว้) เขียนไว้แค่ score >= 70 ทำไมถึงเป็นเช่นนั้น?

    ก็เพราะว่า ถ้าคะแนน ≥ 80 (เงื่อนไขในบรรทัดที่ 12), จะทำให้เข้าเงื่อนไขของเกรด A ทำให้โค้ดในส่วนของ else (บรรทัดที่ 15–27) ไม่ทำงาน นั่นแปลว่า ถ้าโค้ดมาถึงบรรทัดที่ 15 ได้ เรามั่นใจว่า คะแนนต้องน้อยกว่า 80 แน่นอน

  • จะเห็นว่า พอซ้อน if–else หลายๆ ชั้น โค้ดจะอ่านยากมาก กรณีที่มีหลายเงื่อนไข เราสามารถใช้ else if แทนได้

    js
    if (เงื่อนไข1) {
      // โค้ดที่จะทำงาน ถ้าเงื่อนไข1 เป็นจริง
    } else if (เงื่อนไข2) {
      // โค้ดที่จะทำงาน ถ้าเงื่อนไข2 เป็นจริง
    } else {
      // โค้ดที่จะทำงาน ถ้าทั้งเงื่อนไข1 และเงื่อนไข2 เป็นเท็จทั้งคู่
    }
  • นำมาใช้กับโปรแกรมคำนวณเกรดได้ แบบนี้

    js
    calculateGrade.onclick = () => {
      let score = Number(scoreInput.value)
      let grade
      if (score >= 80) {
        grade = 'A'
      } else if (score >= 70) {
        grade = 'B'
      } else if (score >= 60) {
        grade = 'C'
      } else if (score >= 50) {
        grade = 'D'
      } else {
        grade = 'F'
      }
      alert('Your grade is ' + grade)
    }

    จะเห็นว่า โค้ดสั้นลง และอ่านง่ายขึ้นครับ

    ดูโค้ด
    html
    <!doctype html>
    <html>
      <head>
        <title>Grade Calculator</title>
      </head>
      <body>
        Your score:
        <input id="scoreInput" value="100" type="number" max="100" min="0">
        <input id="calculateGrade" value="Calculate grade" type="button">
    
        <script>
          let scoreInput = document.getElementById('scoreInput')
          let calculateGrade = document.getElementById('calculateGrade')
    
          calculateGrade.onclick = () => {
            let score = Number(scoreInput.value)
            let grade
            if (score >= 80) {
              grade = 'A'
            } else if (score >= 70) {
              grade = 'B'
            } else if (score >= 60) {
              grade = 'C'
            } else if (score >= 50) {
              grade = 'D'
            } else {
              grade = 'F'
            }
            alert('Your grade is ' + grade)
          }
        </script>
    
      </body>
    </html>

การแปลงข้อมูลเป็น boolean ​

  • โดยปกติแล้ว เงื่อนไขใน if ควรจะเป็นข้อมูลชนิด boolean

    js
    if (Math.random() < 0.5) {
      alert('Heads')
    } else {
      alert('Tails')
    }
  • แต่จะเกิดอะไรขึ้นถ้าเราใส่ข้อมูลชนิดอื่นลงไปในเงื่อนไขของ if?

    js
    if (12345) {
      // A
    } else {
      // B
    }

    ในกรณีนี้ โค้ดส่วนไหนจะถูกทำงาน? A หรือ B?

  • กรณีที่เงื่อนไขมีชนิดข้อมูลที่ไม่ใช่ boolean จะถูกแปลงเป็น boolean ก่อน

  • โดยในภาษา JavaScript ค่าต่อไปนี้จะถูกแปลงเป็น false:

    • 0
    • NaN (Not a Number, เป็นค่าที่ได้จากการคำนวณทางคณิตศาสตร์ที่ผิดพลาด)
    • "" (สตริงเปล่า)
    • undefined (ค่าเริ่มต้นของตัวแปรที่ยังไม่ได้กำหนดค่า)
    • null (จะได้รู้จักในบทถัดๆ ไป)
  • ส่วนค่าอื่นๆ จะถูกแปลงเป็น true