มาพูดถึงหัวข้อที่น่าสนใจมากและอาจเป็นหัวข้อตลกๆ ใน Javascript กันดีกว่า Javascript สามารถแปลงประเภทตามตัวดำเนินการและค่าที่ใช้ตัวดำเนินการนี้ การแปลงรันไทม์ประเภทนี้อาจเป็นค่าคี่มากและอาจให้ผลลัพธ์ที่ไม่คาดคิดขณะดำเนินการทางคณิตศาสตร์

มันทำอะไร ให้ดูตัวอย่างด้านล่างก่อน ตอนนี้เราจะดูทีละตัวอย่าง

console.log(null * 5);
// Output: 0
console.log(null - 1);
// Output: 6
console.log(NaN + 2);
// Output: 42
console.log("five" * 2);
// Output: NaN
console.log(false == 0);
// Output: true
console.log(null == undefined);
// Output: true
console.log(null == 0);
// Output: false
  • ในบรรทัดแรกเมื่อเราคูณ 5 ด้วยค่า Null ดังนั้นสิ่งที่จะส่งกลับจะเป็น 0 เนื่องจากตัวดำเนินการคูณ JavaScript จะตรวจสอบประเภทของตัวถูกดำเนินการทั้งสองตัว และบังคับให้ตัวถูกดำเนินการนั้นเป็นตัวเลขหากไม่ใช่ ดังนั้น null จะถูกแปลงเป็น 0 ซึ่งส่งผลให้เป็น 0 อีกครั้ง
  • สำหรับตัวดำเนินการบรรทัดที่สอง ลบ จะทำงานเหมือนกับการคูณ โดยบังคับตัวถูกดำเนินการให้เป็นตัวเลข หากยังไม่ได้ดำเนินการ
  • ในคำสั่งที่สาม เรามีตัวดำเนินการบวก (หรือใช้เป็นการต่อสตริงด้วย) ซึ่งจะมีลักษณะว่า หากตัวถูกดำเนินการตัวแรกเป็นประเภทสตริง มันจะแปลงตัวดำเนินการตัวที่สองเป็นสตริงและต่อทั้งสองเข้าด้วยกัน หากตัวดำเนินการตัวแรกเป็นประเภทตัวเลข มันจะบังคับตัวดำเนินการตัวที่สองให้เป็นตัวเลข และผลลัพธ์จะเป็นผลรวมของตัวเลขสองตัว
  • ในคำสั่งที่ 4 ตัวดำเนินการคูณจะส่งกลับ NaN เนื่องจากจะพยายามแปลงสตริงนั้นเป็นตัวเลขเช่น Number("five") ซึ่งจะส่งคืน NaN และการดำเนินการทางคณิตศาสตร์ด้วย NaN จะส่งคืน NaN เสมอ
  • ในคำสั่งที่ห้า เรามีตัวดำเนินการ == ซึ่งจะบังคับตัวถูกดำเนินการทั้งสองตัวให้เป็นประเภทเดียวกันด้วย ซึ่งเหตุใดจึงส่งคืนตัวถูกดำเนินการที่มีลักษณะต่างกันจริง กฎเดียวกันนี้จะถูกนำไปใช้กับข้อความที่หกและเจ็ด

หวังว่าคุณจะเข้าใจการแปลงประเภทอัตโนมัติซึ่งอาจเรียกว่าการแปลงโดยไม่ตั้งใจหากคุณเขียนโดยไม่ได้ตั้งใจ🙂