Programming Track
JavaScript
Type Coercion
Boolean coercion
เข้าใจ truthy และ falsy ผ่าน Boolean() โดยเฉพาะค่าที่มักทำให้สับสน เช่น 0, string ว่าง และ string "0"
Boolean coercion แปลงค่าเป็น true หรือ false
`Boolean coercion` คือการแปลงค่าให้เป็น `true` หรือ `false` ค่าที่แปลงเป็น `false` เรียกว่า `falsy` ส่วนค่าที่แปลงเป็น `true` เรียกว่า `truthy`
ดูผลลัพธ์ของ Boolean() กับค่าต่าง ๆJS
console.log(Boolean(false)); // false
console.log(Boolean(0)); // false
console.log(Boolean("")); // false
console.log(Boolean(null)); // false
console.log(Boolean(undefined)); // false
console.log(Boolean(NaN)); // falseค่า 6 ตัวนี้คือ **falsy values** ทั้งหมดของ JavaScript — ค่าเดียวที่จะแปลงเป็น `false` ส่วนค่าอื่นทั้งหมดเป็น **truthy** รวมถึง string ที่ไม่ว่าง, number ที่ไม่ใช่ 0, และ object ทุกชนิด
| ค่า | Boolean(ค่า) | จำแบบสั้น |
|---|---|---|
| false | false | false ตรง ๆ |
| 0 | false | เลขศูนย์ |
| "" | false | string ว่าง |
| null | false | ว่างโดยตั้งใจ |
| undefined | false | ยังไม่มีค่า |
| NaN | false | คำนวณเป็นตัวเลขไม่ได้ |
| "0" | true | string ที่มีตัวอักษร |
| "false" | true | string ที่มีตัวอักษร |
| [] | true | array เปล่าก็ truthy |
| {} | true | object เปล่าก็ truthy |
JavaScript ใช้ boolean coercion ใน condition โดยอัตโนมัติ
การแปลงเป็น boolean ไม่ได้เกิดแค่ตอนเรียก `Boolean()` เท่านั้น JavaScript ใช้ boolean coercion ในหลายที่โดยอัตโนมัติ เช่น ใน `if`, `while`, `!`, `&&`, และ `||`
- ใน `if (ค่าอะไรก็ได้)` — JavaScript แปลงค่าที่อยู่ในวงเล็บเป็น boolean ก่อนตัดสินใจ
- ใน `while (ค่าอะไรก็ได้)` — ทำงานเหมือน `if`
- `!ค่า` กลับค่าจาก truthy เป็น `false` และ falsy เป็น `true`
- `&&` และ `||` ประเมินค่าแบบ short-circuit และใช้ boolean coercion ภายใน
boolean coercion ใน if และ !JS
if ("hello") {
console.log("string ที่ไม่ว่าง → truthy → เข้า if");
}
if (0) {
console.log("เลขศูนย์ → falsy → ไม่เข้า if");
}
console.log(!"hello"); // false — truthy ถูกกลับเป็น false
console.log(!0); // true — falsy ถูกกลับเป็น trueเข้าใจเรื่องนี้เพราะในบทถัดไปที่เรียน `if`, `while` จะต้องใช้ boolean coercion ตลอดเวลา
ข้อควรระวัง
- `"0"` เป็น **truthy** เพราะเป็น string ที่ไม่ว่าง — อย่าสับสนกับ `0` ที่เป็น falsy
- `"false"` เป็น **truthy** เพราะเป็น string ที่ไม่ว่าง — ไม่เกี่ยวกับค่า `false`
- `[]` (array เปล่า) และ `{}` (object เปล่า) เป็น **truthy** — อย่าคิดว่าว่างแล้วจะเป็น falsy
- `Boolean(new Boolean(false))` ได้ `true` — เพราะ `new Boolean()` สร้าง object ซึ่งเป็น truthy เสมอ
- `document.all` เป็น object เดียวใน JavaScript ที่เป็น falsy — เป็นข้อยกเว้นทางประวัติศาสตร์