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

Sự khác biệt giữa parseInt(string) và Number(string) trong JavaScript?

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ề NaN nế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àoparseInt()Number()
"42"4242
"42px"42NaN
"3.14"33.14
" 10 "1010
""NaN0
"abc"NaNNaN
nullNaN0
undefinedNaNNaN

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).