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 ]