Tôi đã chạy JSLint trên mã JavaScript này và nó nói:
Sự cố ở dòng 32 ký tự 30: Thiếu tham số cơ số.
Đây là mã trong câu hỏi:
imageIndex = parseInt(id.substring(id.length - 1))-1;
Có chuyện gì ở đây vậy?
Tôi đã chạy JSLint trên mã JavaScript này và nó nói:
Sự cố ở dòng 32 ký tự 30: Thiếu tham số cơ số.
Đây là mã trong câu hỏi:
imageIndex = parseInt(id.substring(id.length - 1))-1;
Có chuyện gì ở đây vậy?
Câu trả lời:
Nó luôn luôn là một thực hành tốt để vượt qua cơ số với parseInt -
parseInt(string, radix)
Cho số thập phân -
parseInt(id.substring(id.length - 1), 10)
Nếu tham số cơ số bị bỏ qua, JavaScript sẽ thừa nhận như sau:
( Tham khảo )
Redundant radix parameter
radix
số là một giá trị số, không phải là biểu diễn chuỗi của một giá trị số, do đó không có cơ số để chỉ định.
Để tránh cảnh báo này, thay vì sử dụng:
parseInt("999", 10);
Bạn có thể thay thế nó bằng cách:
Number("999");
Lưu ý rằng parseInt và Number có các hành vi khác nhau , nhưng trong một số trường hợp, người ta có thể thay thế người khác.
parseInt
và Number
. Đây là một bài kiểm tra hiệu suất cũ .
Number()
nhanh hơn 6 lần so vớiparseInt()
Tôi không trả lời đúng câu hỏi, nhưng, tôi nghĩ thật rõ ràng tại sao chúng ta nên chỉ định cơ số .
Trên tài liệu MDN chúng ta có thể đọc rằng:
Nếu cơ số không được xác định hoặc 0 (hoặc vắng mặt), JavaScript sẽ thừa nhận như sau:
Nguồn: MDN parseInt ()
Thêm phần sau vào đầu tệp JS của bạn sẽ báo cho JSHint để thay thế cảnh báo cơ số:
/*jshint -W065 */
Xem thêm: http://jshint.com/docs/#options
"-W065": true
, ví dụ trong một .jshintrc
tập tin.
Tôi đã giải quyết nó chỉ bằng cách sử dụng + foo, để chuyển đổi chuỗi.
Hãy nhớ rằng nó không tuyệt vời cho khả năng đọc (sửa chữa bẩn).
console.log( +'1' )
// 1 (int)
Bạn cũng có thể chỉ cần thêm dòng này ngay phía trên dòng parseInt của bạn:
// eslint-disable-next-line
Điều này sẽ vô hiệu hóa kiểm tra eslint cho dòng tiếp theo. Sử dụng điều này nếu bạn chỉ cần bỏ qua một hoặc hai dòng.
Chỉ cần đặt một chuỗi rỗng vào vị trí cơ số, bởi vì parseInt () có hai đối số:
parseInt (chuỗi, cơ số);
chuỗi Giá trị để phân tích cú pháp. Nếu đối số chuỗi không phải là một chuỗi, thì nó được chuyển đổi thành một chuỗi (sử dụng thao tác trừu tượng ToString). Khoảng trắng hàng đầu trong đối số chuỗi được bỏ qua.
cơ số Một số nguyên từ 2 đến 36 đại diện cho cơ số (cơ sở trong các hệ thống số toán học) của chuỗi đã đề cập ở trên. Chỉ định 10 cho hệ thống số thập phân thường được sử dụng bởi con người. Luôn chỉ định tham số này để loại bỏ sự nhầm lẫn của người đọc và để đảm bảo hành vi có thể dự đoán được. Việc triển khai khác nhau tạo ra kết quả khác nhau khi cơ số không được chỉ định, thường mặc định giá trị là 10.
imageIndex = parseInt (id.sub chuỗi (id.length - 1)) - 1;
imageIndex = parseInt(id.substring(id.length - 1), '')-1;
Chỉ cần thêm quy tắc tùy chỉnh của bạn trong .eslintrc trông giống như vậy
"radix": "off"
và bạn sẽ không bị cảnh báo mất trí nhớ này. Đây là cho kẻ nói dối eslint.
Trước ECMAScript 5, parseInt () cũng tự động phát hiện các chữ bát phân, gây ra vấn đề vì nhiều nhà phát triển giả định số 0 đứng đầu sẽ bị bỏ qua.
Vì vậy, thay vì:
var num = parseInt("071"); // 57
Làm cái này:
var num = parseInt("071", 10); // 71
var num = parseInt("071", 8);
var num = parseFloat(someValue);