Cả hai đều chuyển chuỗi thành số, nhưng hành xử khác nhau hoàn toàn:
1. parseInt(string, radix?)
- Phân tích chuỗi từ đầu đến ký tự không phải chữ số đầu tiên.
- Bỏ qua khoảng trắng đầu.
- Trả về
NaNnếu ký tự đầu không phải số. - Hỗ trợ cơ số (radix):
parseInt("10", 2)= 2 (nhị phân).
parseInt("765world") // 765 (dừng tại 'w')
parseInt("50px") // 50 (dừng tại 'p')
parseInt(" 100 ") // 100 (bỏ qua space)
parseInt("abc") // NaN
parseInt("0xFF") // 255 (hex, radix mặc định hoặc 16)
parseInt("10", 2) // 2 (binary)
parseInt("10", 8) // 8 (octal)
2. Number(string)
- Chuyển đổi toàn bộ chuỗi thành số.
- Nếu chuỗi chứa ký tự không hợp lệ (khoảng trắng giữa, chữ cái) →
NaN. - Hỗ trợ float, scientific notation, hex (0x), binary (0b), octal (0o).
- Chuỗi rỗng hoặc chỉ space →
0.
Number("765world") // NaN
Number("50px") // NaN
Number(" 100 ") // 100
Number("") // 0
Number("10.5") // 10.5
Number("1e3") // 1000
Number("0xFF") // 255
Number("0b1010") // 10
So sánh nhanh
| Đầu vào | parseInt() | Number() |
|---|---|---|
| "42" | 42 | 42 |
| "42px" | 42 | NaN |
| "3.14" | 3 | 3.14 |
| " 10 " | 10 | 10 |
| "" | NaN | 0 |
| "abc" | NaN | NaN |
| null | NaN | 0 |
| undefined | NaN | NaN |
Khi nào dùng cái nào?
- parseInt: Phân tích giá trị CSS (
"16px"), input user có thể có đơn vị, cần radix cụ thể. - Number(): Chuyển đổi chuỗi số "sạch" (JSON, API, form input), cần giữ phần thập phân.
- +str (unary plus): Rút gọn của
Number(), nhanh hơn. VD:+"10.5" === 10.5. - parseFloat(): Giữ phần thập phân, dừng tại ký tự không hợp lệ (giống parseInt nhưng cho float).