Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

Short-circuit Assignment ใน JavaScript

Short-circuit Assignment ใช้ Operator && และ || ร่วมกับการกำหนดค่า (Assignment) เพื่อให้ค่า Default หรือเลือกค่าตามเงื่อนไขได้อย่างกระชับ

ตัวอย่างโค้ด

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>Short-circuit Assignment</title>
  <style>
    body { font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; }
    .result, .sample { font-size: 20px; font-weight: 500; color: blueviolet; }
    .sample { color: red; }
  </style>
</head>
<body>
  <h1>Short-circuit Assignment</h1>
  <div class="sample">a = 22 || 0 || 0<br>b = 0 && 22 && 22</div>
  <div class="result"></div>
  <br />
  <button class="Btn">คลิกที่นี่</button>
  <h3>คลิกปุ่มด้านบนเพื่อดูค่าของตัวแปร a และ b ในสมการข้างต้น</h3>
  <script>
    const resEle = document.querySelector(".result");
    const BtnEle = document.querySelector(".Btn");
    
    BtnEle.addEventListener("click", () => {
      let a, b;
      a = 22 || 0 || 0;      // Truthy แรก = 22
      b = 0 && 22 && 22;     // Falsy แรก = 0
      resEle.innerHTML = "a = " + a + "<br>";
      resEle.innerHTML += "b = " + b + "<br>";
    });
  </script>
</body>
</html>

รูปแบบการใช้งานทั่วไป

// Default Value ด้วย ||
const name = userName || "Guest";        // ถ้า userName falsy ใช้ "Guest"
const config = options || {};            // Default empty object

// Conditional Assignment ด้วย &&
const isAdmin = user && user.role === "admin";  // ป้องกัน error ถ้า user null
const cache = enabled && getCache();            // เรียกฟังก์ชันก็ต่อเมื่อ enabled

// Logical Assignment Operators (ES2021)
a ||= b;  // a = a || b  (assign ถ้า a falsy)
a &&= b;  // a = a && b  (assign ถ้า a truthy)
a ??= b;  // a = a ?? b  (assign ถ้า a null/undefined) - แนะนำมากกว่า ||

⚠️ ข้อควรระวัง

ตัวอย่างในโค้ดมีข้อความว่า "non-zero number evaluates to false" - ข้อนี้ผิด ครับ ใน JavaScript ตัวเลข non-zero ทุกตัวเป็น Truthy (ยกเว้น 0, -0, 0n)

ผลลัพธ์

a = 22 (ค่า Truthy แรก), b = 0 (ค่า Falsy แรก)