11/08/2018, 20:25

Làm thế nào để ép kiểu Integer cho một số hoặc một string số trong Javascript

Đã bước chân vào "thế giới" Javascript, nhiều khi bạn thật sự điên cuồng. Có quá nhiều thứ được biết đến ở Javascript mà bạn cần tìm hiểu để áp dụng thành thục cho dự án của mình. Và đôi khi cái của dở hơi này nó làm bạn phát khùng lên với nó. Bây giờ thử làm một bài toán thế này: cho một số hoặc ...

Đã bước chân vào "thế giới" Javascript, nhiều khi bạn thật sự điên cuồng. Có quá nhiều thứ được biết đến ở Javascript mà bạn cần tìm hiểu để áp dụng thành thục cho dự án của mình. Và đôi khi cái của dở hơi này nó làm bạn phát khùng lên với nó.
Bây giờ thử làm một bài toán thế này: cho một số hoặc một string bao gồm các chữ số, hãy chuyển nó về kiểu Integer.

Rất nhanh chóng, các bạn có thể dùng Google thần công. Ok rồi, trang đầu có cả đống ví dụ luôn.
javascript convert string to int
Vậy là trong Javascript bạn có thể dùng parseInt để convert từ number/string của number sang integer.
Bất chợt, một thói quen hiện lên, bạn click vào stackoverflow.com, link đó nằm ở top luôn cơ mà.
stackoverflow javascript convert string to int

Oh, thêm một cách mới: Math.floor và bạn thử với ví dụ chẳng hạn string '45.05'; kết quả nhận được đúng như mong đợi là 45.
Hum, có vẻ ok đấy.
Giờ thử với số âm xem sao: -45.05. parseInt cho ra kết quả -45 trong khi Math.floor cho ra -46, không ổn rồi.
Vậy là bạn sẽ không đồng nhất việc dùng parseInt vs Math.floor đươc nữa.

Một ngày nọ, bạn đọc được ở đâu đó có người viết var intValue = num >> 0;. Wtf, kiểu Number trong Javascript là kiểu số thực, mà trong các ngôn ngữ khác như C/C++ thì chỉ có kiểu Integer mới dùng phép dịch bit được, tại sao trong đoạn code trên lại viết như trên. Và bạn thử với một đoạn code nho nhỏ.
'45.05' >> 0 -> kết quả bằng 45 và '-45.05' >> 0 cho kết quả -45.
Wow wow, giống hệt với kết quả khi thực hiện parseInt luôn mới nể.
Sau đó bạn thử với dịch << kết quả nhận được cũng tương đương. Có vẻ hay ho rồi.
Giờ thử chơi với hai của giời là undefined và null.
undefined >> 0 và null >> 0 đều cho kết quả bằng 0.
parseInt(undefined) và parseInt(null) cho kết quả NaN.

~ là toán tử not bitwise, khi ~~ thì cũng tương đương với dịch >>0 hoặc <<0.

Rảnh rỗi làm bài test xem kết quả thực thi thế nào. và kết quả cho thấy bitwise thắng áp đảo.
Test hiệu năng

Trong bài viết này, chúng ta đã xem một số cách hay ho để convert từ number hoặc string dạng số sang kiểu số nguyên. Các bạn có thể lựa chọn cách hợp lý hoặc có thể kết hợp cho đầu vào của mình để có hiệu quả đạt như mong muốn.
Happy coding!

  • parseInt
  • Math.floor
  • stackoverflow javascript convert string to int
  • Test

Tiep Phan - 1/19/2017

0