สมมติว่าเราได้รับโค้ดและเอาต์พุตต่อไปนี้ และเราต้องหาคำตอบว่าเหตุใด JavaScript จึงแปลงสตริงว่าง(“ “) เป็น 0 -
const digify = (str) => { const parsedStr = [...str].map(Number) return parsedStr; } console.log(digify("778 858 7577"))
ผลลัพธ์
[ 7, 7, 8, 0, 8, 5, 8, 0, 7, 5, 7, 7 ]
พฤติกรรมนี้อาจสร้างความรำคาญใจได้มากโดยเฉพาะเมื่อเรามี 0 ในสตริงด้วยเช่นกัน
สิ่งนี้เกิดขึ้นจริงเพราะในฟังก์ชัน map() เมื่อเราแปลงแต่ละอักขระเป็นตัวเลขที่เทียบเท่าโดยใช้ Number สิ่งที่ทำคือใช้ AbstractEquality Comparison (==) แทน Strict Equality Comparison (===) ตามที่' ' ==0 ให้ค่าจริง ดังนั้นแต่ละช่องว่างจะถูกแปลงเป็น 0
เพื่อป้องกันพฤติกรรมไร้สาระนี้ เราสามารถปรับแต่งฟังก์ชัน map() ของเราได้ดังนี้ -
ตัวอย่าง
const sin = (str) => { const parsedStr = [...str].map(i => parseInt(i, 10)) return parsedStr; } console.log(sin("778 858 7577"))
ดังนั้น เมื่อใดก็ตามที่พบช่องว่าง พื้นที่นั้นจะถูกแปลงเป็น NaN ซึ่งเป็นพฤติกรรมเชิงตรรกะที่มากกว่า
ผลลัพธ์
[ 7, 7, 8, NaN, 8, 5, 8, NaN, 7, 5, 7, 7 ]