Đây cũng là cách tôi sử dụng vì nó rõ ràng nhất — giúp người khác dễ dàng theo dõi ý định mã của bạn 🤓
Hãy nhớ rằng mã tốt nhất không nhất thiết phải là cách thông minh nhất, đó là cách truyền đạt tốt nhất sự hiểu biết về mã của bạn cho người khác…
Như bạn có thể đã biết, có nhiều cách để chuyển đổi một chuỗi thành một số nguyên trong JavaScript. Tuy nhiên, vẫn còn tranh luận về phương pháp nào là phương pháp “tốt nhất” dành cho các nhà phát triển. Hãy xem xét một số tùy chọn
parseInt[ ]
parseInt[string, radix]
Chúng tôi bắt đầu với
console.log[parseInt[“24haha25”]] // 24
4 có hai đối số, một chuỗi và một cơ số. Hàm trả về một số nguyên được phân tích cú pháp từ chuỗi đã choNếu đối số đầu tiên không phải là một chuỗi, nó sẽ tự động được chuyển đổi thành một chuỗi bằng cách sử dụng
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN0. Dù bằng cách nào, mọi khoảng trắng ở đầu đều bị bỏ qua
Phương thức
console.log[parseInt[“24haha25”]] // 24
4 bắt đầu ở vị trí 0 và xác định xem ký tự được tìm thấy ở đó có thể được chuyển đổi thành một số hợp lệ hay không. Nếu không, phương thức trả về const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN2 và dừng. Đây là một ví dụ
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN
Đầu ra sẽ là
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN2, mặc dù chuỗi chứa một số
Nếu ký tự ở vị trí 0 hợp lệ, phương thức sẽ tiếp tục và thực hiện kiểm tra tương tự. Điều này tiếp tục cho đến khi
console.log[parseInt[“24haha25”]] // 24
4 gặp một số không hợp lệ, tại thời điểm đó, nó sẽ chuyển đổi chuỗi hiện tại thành một sốconsole.log[parseInt[“24haha25”]] // 24
Điều này sẽ trả về
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN5 vì nó sẽ dừng phân tích cú pháp tại
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN6, tức là
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN2
MDN gợi ý rằng khi sử dụng
console.log[parseInt[“24haha25”]] // 24
4, bạn nên “Luôn chỉ định một const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN9 để tránh… hành vi không đáng tin cậy. ”
Điều này là do trước ECMAScript 5,
console.log[parseInt[“24haha25”]] // 24
4 đã sử dụng cơ số bát phân [8] làm mặc định nếu một chuỗi bắt đầu bằng “0”. Kể từ ECMAScript 5, mặc định là cơ số thập phân [10]“Nếu cơ số là
console.log[parseInt[“24haha25”]] // 24
1 hoặcconsole.log[parseInt[“24haha25”]] // 24
2, thì nó được giả định làconsole.log[parseInt[“24haha25”]] // 24
3 trừ khi số bắt đầu bằng cặp ký tựconsole.log[parseInt[“24haha25”]] // 24
4 hoặcconsole.log[parseInt[“24haha25”]] // 24
5, trong trường hợp đó cơ số củaconsole.log[parseInt[“24haha25”]] // 24
6 được giả định. ” — Tài liệu MDN
parseFloat[ ]
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN6
console.log[parseInt[“24haha25”]] // 24
7 khá giống với console.log[parseInt[“24haha25”]] // 24
4, với hai điểm khác biệt chínhĐầu tiên, không giống như
console.log[parseInt[“24haha25”]] // 24
4, console.log[parseInt[“24haha25”]] // 24
7 không lấy cơ số làm đối số. Điều này có nghĩa là chuỗi phải biểu thị số dấu phẩy động ở dạng thập phân [cơ số 10], không phải bát phân [cơ số 8] hoặc thập lục phân [cơ số 6]Thứ hai, khi sử dụng
console.log[parseInt[“24haha25”]] // 24
7, dấu thập phân là một ký tự hợp lệ, nhưng chỉ lần đầu tiên nó xuất hiện. Nếu đạt đến dấu thập phân thứ hai, phương thức sẽ dừng phân tích cú pháp tại vị trí đóconst str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN0
Mặt khác, các hành vi khác của
console.log[parseInt[“24haha25”]] // 24
4 cũng được tìm thấy ở đây- Chỉ số đầu tiên trong chuỗi được trả về
- Khoảng trắng đầu và cuối được cho phép và bỏ qua
- Nếu ký tự đầu tiên không phải là một số hợp lệ, thì trả về
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN
2
Số[ ]
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN2
Các chức năng phân tích cú pháp và
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN64 phần lớn có thể hoán đổi cho nhau.
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN64 có thể xử lý một số thập phân, nhưng cũng sẽ bị bỏ qua nhiều hơn một dấu thập phân. Khoảng trắng đầu và cuối vẫn được chấp nhận và bỏ qua
Có một vài sự khác biệt. Các phương thức phân tích cú pháp, như tên gợi ý, cố gắng phân tích cú pháp từng phần một của chuỗi khi chúng chuyển đổi nó,
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN64 cố gắng chuyển đổi toàn bộ đối số chuỗi thành một số, tất cả cùng một lúc
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN6
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN64 là hàm tạo của JavaScript
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN68 được gọi là hàm, thực hiện chuyển đổi kiểu. Nó cố gắng chuyển đổi bất kỳ giá trị nào thành một số
- ________ 169 trở thành ________ 52, ________ 201 trở thành ________ 202
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN
03 trở thànhconsole.log[parseInt[“24haha25”]] // 24
2,console.log[parseInt[“24haha25”]] // 24
1 trở thànhconst str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN
2- Chuỗi rỗng
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN
07 trở thànhconsole.log[parseInt[“24haha25”]] // 24
2, chuỗi không phải số trở thànhconst str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN
2 const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN
20 choconsole.log[parseInt[“24haha25”]] // 24
2;
Đây là tổng quan về
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN64 từ W3Schools
Toán tử đơn nguyên +
Bạn có thể biết hoặc không biết về khả năng chuyển đổi chuỗi thành số trong JavaScript của toán tử một ngôi
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN25. Ví dụ
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN6
Theo như tôi biết, việc sử dụng toán tử đơn nguyên
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN25 theo cách này bắt chước chính xác hành vi của
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN64 mà không có bất kỳ ngoại lệ nào. Vì vậy, tại sao lại sử dụng
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN64?
Một số người xem toán tử
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN25 như một dạng đường cú pháp vì nó có thể được sử dụng để viết tắt các hàm phân tích cú pháp hoặc hàm
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN64
Tuy nhiên, ít mã hơn không phải lúc nào cũng bằng mã ngắn gọn hơn. Sự rõ ràng nên được xem xét khi đưa ra quyết định về các phím tắt như vậy
Không phải ai cũng có thể nhận thức được hành vi này, điều này có thể dẫn đến sự nhầm lẫn cho người đọc mã của bạn, trong khi
console.log[parseInt[“24haha25”]] // 24
4 rõ ràng và ngắn gọnTheo tôi, nói chung, bạn nên sử dụng mã mô tả những gì nó làm thay vì mã sử dụng tác dụng phụ của việc không hoạt động
Nhân với 1
Một cách tắt khác, nếu bạn biết chuỗi mà bạn đang muốn chuyển đổi là một số, bạn có thể nhân nó với một để chuyển đổi nó
console.log[parseInt[“24haha25”]] // 24
2Xin nhắc lại, phương pháp này hoạt động giống như phương pháp
const str = “What’s funnier than 24?”,console.log[parseInt[str]] // NaN64 và tôi đã thấy nó được quảng cáo là phương pháp chuyển đổi nhanh nhất. Tuy nhiên, những lo ngại trước đây của tôi về tính hữu ích của đường cú pháp như vậy cũng được áp dụng ở đây
Biểu thức chính quy
Một tùy chọn cho phép tùy chỉnh đang triển khai biểu thức chính quy trong một chức năng do chính bạn xây dựng. Đây là một ví dụ từ MDN
Vì vậy, phương pháp nào là tốt nhất?
Tôi hỏi điều này một cách chân thành, độc giả thân mến. Bây giờ chúng ta đã đề cập đến một số tùy chọn [nhưng không phải tất cả] ở đây, tôi rất muốn nghe ý kiến của bạn về phương pháp [hoặc các phương pháp] mà bạn cho là tốt nhất [và tại sao]
Tôi chắc rằng nhiều người trong số các bạn hiểu biết nhiều hơn tôi về thời gian thực hiện, mặc dù hiệu suất cho các toán tử và chức năng thay đổi cùng với việc tối ưu hóa công cụ JavaScript trong trình duyệt
Tôi hy vọng sẽ đọc được một số cuộc tranh luận hữu ích và lành mạnh, và nếu không có gì khác, tôi hy vọng đây là một bài đánh giá tốt và thậm chí có thể bạn đã học được điều gì đó mới