Programming Track
JavaScript
Type Coercion
Safe conversion
สรุปวิธีแปลงค่าเองอย่างตั้งใจด้วย Number(), String(), Boolean() และเลือก === เมื่อต้องการเปรียบเทียบแบบไม่แปลงชนิด
แปลงเองเมื่ออยากให้โค้ดเดาได้
วิธีลด bug จาก type coercion คือแปลงค่าเองเมื่อเจตนาชัดเจน ใช้ `Number()` เมื่อต้องการคำนวณ ใช้ `String()` เมื่อต้องการข้อความ และใช้ `Boolean()` เมื่อต้องการดู truthy/falsy
| ต้องการ | ใช้ | ตัวอย่าง |
|---|---|---|
| คำนวณตัวเลข | Number() | `Number("42") + 8` ได้ `50` |
| แสดงเป็นข้อความ | String() | `String(150)` ได้ `"150"` |
| ดู truthy/falsy | Boolean() | `Boolean("ok")` ได้ `true` |
| เทียบแบบไม่แปลง | === | `"5" === 5` ได้ `false` |
หลักปฏิบัติเพื่อความปลอดภัย
- ใช้ `Number()` แปลง input ที่มาจาก `prompt()`, form, หรือ API ก่อนคำนวณ
- ใช้ `===` / `!==` เป็นค่าเริ่มต้น เปลี่ยนเป็น `==` เฉพาะเมื่อเจตนาชัดเจน
- ใช้ `Boolean()` เพื่อเช็ค truthy/falsy แบบอ่านง่าย แทน `!!ค่า`
- ใช้ `String()` เพื่อแปลงค่าเป็นข้อความก่อนแสดงผล
เมื่อเริ่มต้นเขียน JavaScript สิ่งสำคัญที่สุดคือ **รู้ว่า JavaScript แปลงชนิดให้เมื่อไร** และ **แปลงเองเมื่อเจตนาชัดเจน** — ไม่ใช่จำทุกกรณีของ implicit coercion
ข้อควรระวัง
- `Boolean(ค่า)` อ่านง่ายกว่า `!!ค่า` สำหรับผู้เริ่มต้น — ให้ความหมายชัดเจนว่า 'แปลงค่านี้เป็น boolean'
- `Number()` ไม่ได้แปลว่า input เป็นตัวเลขที่ใช้ได้ — เช็ค `Number.isNaN()` ด้วยเสมอเมื่อ input มาจากผู้ใช้
- `String()` ทำงานได้กับทุกค่าแม้แต่ `null` และ `undefined` — ใช้เมื่อต้องการข้อความสำหรับแสดงผลเท่านั้น
- อย่าใช้ `new Number()`, `new String()`, `new Boolean()` — พวกนี้สร้าง object ไม่ใช่ primitive และทำให้ `typeof` ให้ผลลัพธ์ที่ผิดคาด