Programming Track
JavaScript
Type Coercion
String coercion
เรียนรู้ว่า operator + แปลงค่าเป็น string และต่อข้อความเมื่อเจอ string อย่างไร พร้อมฝึกแก้ bug จาก string + number
`+` จะต่อข้อความเมื่อมี string
`String coercion` คือการที่ JavaScript แปลงค่าให้เป็น string ก่อนใช้งาน กรณีที่เจอบ่อยคือ operator `+` ถ้ามี string อยู่ฝั่งใดฝั่งหนึ่ง JavaScript จะต่อข้อความแทนการบวกเลข
string ฝั่งเดียวก็ทำให้ `+` กลายเป็นการต่อข้อความJS
let first = "5" + 2;
let second = 5 + "2";
let label = "score: " + 10;
console.log(first); // "52"
console.log(second); // "52"
console.log(label); // "score: 10"ถ้าต้องการบวกเลขจริง ให้แปลง string ด้วย `Number()` ก่อนใช้ `+`
String coercion เกิดเมื่อไรบ้าง
- ใช้ `+` โดยมี string อย่างน้อย 1 ตัว — JavaScript แปลงอีกฝั่งเป็น string
- ใช้ `console.log` กับค่าที่ไม่ใช่ string — JavaScript เรียก `.toString()` ให้เอง
- ใช้ template literal `` `${ค่าตัวแปร}` `` — JavaScript แปลง `${}` เป็น string โดยอัตโนมัติ
- เรียก `String(ค่า)` เพื่อแปลงแบบตั้งใจ (explicit)
template literal ใช้ string coercion ในตัวJS
let price = 99;
let message = `ราคาคือ ${price} บาท`;
console.log(message); // "ราคาคือ 99 บาท"
console.log(typeof message); // "string"ข้อควรระวัง
- `+` ที่มี string เปลี่ยนผลลัพธ์เป็น string ทันที เช่น `1 + 2 + "3"` ได้ `"33"` เพราะ `1+2` คำนวณก่อนได้ `3` แล้ว `3 + "3"` ได้ `"33"`
- `"3" + 2 + 1` ได้ `"321"` เพราะ JavaScript อ่านจากซ้ายไปขวา — `"3"+2` ได้ `"32"` ก่อน แล้ว `"32"+1` ได้ `"321"`
- Template literal แปลงทุกอย่างเป็น string อัตโนมัติ — อย่าลืมแปลงกลับด้วย `Number()` ถ้าต้องการคำนวณต่อ
- ถ้าใช้ `+` เพื่อต่อข้อความ แต่มีตัวแปรที่อาจเป็น `null` หรือ `undefined` — JavaScript จะแปลงเป็น string `"null"` และ `"undefined"` ซึ่งมักไม่ใช่สิ่งที่ต้องการ