Cách chuyển đổi một chuỗi thành một số trong JavaScript

Tìm hiểu cách chuyển đổi một chuỗi thành một số bằng JavaScript


JavaScript cung cấp nhiều cách khác nhau để chuyển đổi một giá trị chuỗi thành một số.

Tốt nhất: sử dụng đối tượng Number

Cách tốt nhất theo ý kiến của tôi là sử dụng đối tượng Number, trong ngữ cảnh không phải hàm tạo (không cónewtừ khóa):

const count = Number('1234') //1234

Điều này cũng quan tâm đến số thập phân.

Số là mộtđối tượng bao bọccó thể thực hiện nhiều thao tác. Nếu chúng ta sử dụng hàm tạo (new Number("1234")) nó trả về cho chúng ta một đối tượng Number thay vì một giá trị số, vì vậy hãy chú ý.

Number vs new Number

Chú ý đến dấu phân cách giữa các chữ số:

Number('10,000') //NaN
Number('10.00') //10
Number('10000') //10000

Trong trường hợp bạn cần phân tích cú pháp một chuỗi có dấu phân tách thập phân, hãy sử dụngIntl.NumberFormatthay thế.

Các giải pháp khác

Sử dụngparseInt()parseFloat()

Một giải pháp tốt khác cho số nguyên là gọiparseInt()chức năng:

const count = parseInt('1234', 10) //1234

Đừng quên tham số thứ hai, là cơ số, luôn là 10 cho số thập phân, nếu không quá trình chuyển đổi có thể cố gắng đoán cơ số và cho kết quả không mong muốn.

parseInt()cố gắng lấy một số từ một chuỗi không chỉ chứa một số:

parseInt('10 lions', 10) //10

nhưng nếu chuỗi không bắt đầu bằng một số, bạn sẽ nhận đượcNaN(Không phải là một con số):

parseInt("I'm 10", 10) //NaN

Ngoài ra, giống như Number, nó không đáng tin cậy với các dấu phân cách giữa các chữ số:

parseInt('10,000', 10) //10     ❌
parseInt('10.00', 10) //10     ✅ (considered decimals, cut)
parseInt('10.000', 10) //10     ✅ (considered decimals, cut)
parseInt('10.20', 10) //10     ✅ (considered decimals, cut)
parseInt('10.81', 10) //10     ✅ (considered decimals, cut)
parseInt('10000', 10) //10000  ✅

Nếu bạn muốn giữ lại phần thập phân và không chỉ lấy phần nguyên, hãy sử dụngparseFloat(). Lưu ý rằng không giống như nóparseInt()anh chị em, nó chỉ cần một đối số - chuỗi để chuyển đổi:

parseFloat('10,000')  //10     ❌
parseFloat('10.00')   //10     ✅ (considered decimals, cut)
parseFloat('10.000')  //10     ✅ (considered decimals, cut)
parseFloat('10.20')   //10.2   ✅ (considered decimals)
parseFloat('10.81')   //10.81  ✅ (considered decimals)
parseFloat('10000')   //10000  ✅

Sử dụng+

Một "mẹo" là sử dụng toán tử một ngôi+trước chuỗi:

+'10,000'  //NaN ✅
+'10.000'  //10 ✅
+'10.00' //10 ✅
+'10.20'  //10.2 ✅
+'10.81'  //10.81 ✅
+'10000' //10000 ✅

Xem nó quay trở lại như thế nàoNaNtrong ví dụ đầu tiên, đó là hành vi đúng: nó không phải là một số.

Sử dụngMath.floor()

Tương tự như+toán tử một ngôi, nhưng trả về phần nguyên, được sử dụngMath.floor():

Math.floor('10,000') //NaN ✅
Math.floor('10.000') //10 ✅
Math.floor('10.00') //10 ✅
Math.floor('10.20') //10 ✅
Math.floor('10.81') //10 ✅
Math.floor('10000') //10000 ✅

Sử dụng* 1

Nói chung là một trong những lựa chọn nhanh nhất, hoạt động như+toán tử một ngôi, vì vậy nó không thực hiện chuyển đổi thành số nguyên nếu số là số thực.

'10,000' * 1 //NaN ✅
'10.000' * 1 //10 ✅
'10.00' * 1 //10 ✅
'10.20' * 1 //10.2 ✅
'10.81' * 1 //10.81 ✅
'10000' * 1 //10000 ✅

Hiệu suất

Mỗi một trong những phương pháp này có một hiệu suất khác nhau trên các môi trường khác nhau, vì tất cả phụ thuộc vào việc triển khai. Trong trường hợp của tôi,* 1là hiệu suất người chiến thắng nhanh hơn 10 lần so với các lựa chọn thay thế khác.

Sử dụngJSPerfđể thử bản thân:

Performance in conversion

Tải xuống miễn phí của tôiSổ tay dành cho Người mới bắt đầu JavaScript


Các hướng dẫn js khác: