Computer >> Máy Tính >  >> Lập trình >> Javascript

Tại sao Array.map (Số) chuyển đổi không gian trống thành số không? JavaScript

Giả sử chúng tôi được cung cấp mã và đầu ra sau đây và chúng tôi cần tìm hiểu lý do tại sao JavaScript chuyển đổi các chuỗi trống (““) thành 0 -

const digify = (str) => {
   const parsedStr = [...str].map(Number)
   return parsedStr;
}
console.log(digify("778 858 7577"))

Đầu ra

[
7, 7, 8, 0, 8,
5, 8, 0, 7, 5,
7, 7
]

Hành vi này có thể rất đáng lo ngại, đặc biệt là khi chúng ta cũng có một số 0 trong chuỗi

Điều này thực sự xảy ra bởi vì bên trong hàm map () khi chúng ta chuyển đổi từng ký tự thành số tương đương của nó bằng cách sử dụng Số, những gì nó thực hiện là nó thực sự sử dụng So sánh chất lượng trừu tượng (==) thay vì So sánh ngang bằng nghiêm ngặt (===) theo đó ' '==0 mang lại giá trị true và do đó mỗi khoảng trắng được chuyển đổi thành 0.

Để ngăn chặn hành vi vô lý này, chúng ta có thể thực hiện một số chỉnh sửa trong hàm map () của chúng ta như thế này -

Ví dụ

const sin = (str) => {
   const parsedStr = [...str].map(i => parseInt(i, 10))
   return parsedStr;
}
console.log(sin("778 858 7577"))

Do đó, bất cứ khi nào một khoảng trắng gặp phải, nó sẽ được chuyển đổi thành NaN và đó là một hành vi logic hơn.

Đầu ra

[
7, 7, 8, NaN, 8,
5, 8, NaN, 7, 5,
7, 7
]