Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tại sao Array.map(Number) chuyển khoảng trắng thành 0 trong JavaScript?

Giả sử chúng ta có đoạn mã sau và cần hiểu tại sao JavaScript chuyển chuỗi rỗng (" ") thành 0:

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

Kết quả

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

Hành vi này có thể gây nhầm lẫn, đặc biệt khi chuỗi cũng chứa số 0 thực sự.

Nguyên nhân là do bên trong hàm map(), khi chuyển đổi từng ký tự sang số bằng Number, JavaScript sử dụng So sánh trừu tượng (==) thay vì So sánh nghiêm ngặt (===). Theo đó, ' ' == 0 trả về true, do đó mỗi khoảng trắng được chuyển thành 0.

Để khắc phục hành vi này, ta có thể điều chỉnh hàm map() như sau:

Ví dụ

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

Khi đó, mỗi khoảng trắng sẽ được chuyển thành NaN – hành vi hợp lý hơn.

Kết quả

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