การเปรียบเทียบ String และ Boolean ใน JavaScript มีพฤติกรรมพิเศษเนื่องจาก Type Coercion
คืนค่า true
false == "0"; // true true == "1"; // true false == ""; // true
คืนค่า false
false == "false"; // false true == "true"; // false
เหตุผล
เมื่อเปรียบเทียบ Boolean กับ String ด้วย == JavaScript จะแปลง Boolean เป็น Number (false→0, true→1) แล้วแปลง String เป็น Number เช่นกัน
"0"→ 0,""→ 0,"1"→ 1"false"→ NaN,"true"→ NaN
Strict Equality (===)
var data = true; data === "true"; // false (type ต่างกัน) String(data) === "true"; // true (แปลงเป็น string ก่อน)
แนวทางปฏิบัติที่ดี
- ใช้
===(strict equality) เสมอ – ไม่มี type coercion - แปลงชนิดข้อมูลให้ตรงกันก่อนเปรียบเทียบ:
Boolean(str),String(bool),Number(str) - สำหรับ form inputs (string) ต้องการ boolean:
value === "true"หรือvalue === "on"
Boolean() conversion
Boolean("false"); // true! (non-empty string)
Boolean(""); // false
Boolean("0"); // true! (non-empty string)