มาพูดถึงหัวข้อที่น่าสนใจมากและอาจเป็นหัวข้อตลกๆ ใน 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 เสมอ
- ในคำสั่งที่ห้า เรามีตัวดำเนินการ == ซึ่งจะบังคับตัวถูกดำเนินการทั้งสองตัวให้เป็นประเภทเดียวกันด้วย ซึ่งเหตุใดจึงส่งคืนตัวถูกดำเนินการที่มีลักษณะต่างกันจริง กฎเดียวกันนี้จะถูกนำไปใช้กับข้อความที่หกและเจ็ด
หวังว่าคุณจะเข้าใจการแปลงประเภทอัตโนมัติซึ่งอาจเรียกว่าการแปลงโดยไม่ตั้งใจหากคุณเขียนโดยไม่ได้ตั้งใจ🙂