Programming Track
JavaScript
Type Coercion
Overview
เข้าใจภาพรวมของ type coercion ว่า JavaScript แปลงชนิดข้อมูลเองเมื่อไร และต่างจากการแปลงเองด้วย Number(), String(), Boolean() อย่างไร
Type coercion คือการแปลงชนิดข้อมูล
`Type coercion` คือการที่ JavaScript เปลี่ยนค่าจากชนิดหนึ่งไปเป็นอีกชนิดหนึ่ง เช่น string เป็น number หรือ number เป็น string เรื่องนี้สำคัญเพราะ JavaScript อาจแปลงให้เองแบบเงียบ ๆ เวลาใช้ operator หรือเปรียบเทียบค่า
| แบบ | ความหมาย | ตัวอย่าง |
|---|---|---|
| Implicit coercion | JavaScript แปลงให้เอง | `"5" + 2` ได้ `"52"` |
| Explicit coercion | เราแปลงเองแบบตั้งใจ | `Number("5") + 2` ได้ `7` |
บทชุดนี้จะแยก type coercion ออกเป็นเรื่องย่อย เพื่อให้เห็นกฎทีละแบบ ไม่ต้องจำทุกอย่างพร้อมกัน
Explicit coercion ใช้ฟังก์ชัน Number(), String(), Boolean()
การแปลงค่าเองอย่างตั้งใจใช้ฟังก์ชัน 3 ตัวนี้ โดยไม่ใช้ `new`: • `Number(ค่า)` — แปลงเป็น number • `String(ค่า)` — แปลงเป็น string • `Boolean(ค่า)` — แปลงเป็น true หรือ false
explicit coercion ทั้ง 3 แบบJS
let strToNum = Number("42"); // 42
let numToStr = String(150); // "150"
let strToBool = Boolean("hello"); // true
console.log(typeof strToNum); // "number"
console.log(typeof numToStr); // "string"
console.log(typeof strToBool); // "boolean"ใช้ explicit coercion เมื่อต้องการให้โค้ดเดาได้และลด bug — อย่าพึ่ง implicit coercion เป็นหลัก
ข้อควรระวัง
- Implicit coercion ทำให้เกิด bug โดยไม่รู้ตัว — ค่าที่ดูถูกต้องอาจกลายเป็นค่าผิดชนิดโดยไม่มีการแจ้งเตือน
- `Number(undefined)` ได้ `NaN` แต่ `Number(null)` ได้ `0` — ต่างกันโดยไม่ใช่เหตุผลที่ชัดเจน
- `String(null)` ได้ `"null"` และ `String(undefined)` ได้ `"undefined"` — กลายเป็น string ที่ดูเหมือนมีค่าจริง
- บทต่อ ๆ ไปจะลงรายละเอียด coercion แต่ละประเภท — สังเกตว่าเมื่อไร JavaScript แปลงให้เอง และเมื่อไรควรแปลงเอง