Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

เหตุใด Array.map (หมายเลข) จึงแปลงพื้นที่ว่างเป็นศูนย์ JavaScript


สมมติว่าเราได้รับโค้ดและเอาต์พุตต่อไปนี้ และเราต้องหาคำตอบว่าเหตุใด 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
]