Các lệnh gọi tới parseIntphải luôn chỉ định một cơ sở trong đối số thứ hai:
parseInt("08", 10);
Các phiên bản JavaScript trước đây coi các chuỗi bắt đầu bằng số 0bát phân (khi không có cơ số nào được chỉ định) và không 08phải 09là số bát phân hợp lệ.
Từ tài liệu Mozilla :
Nếu cơ số là không xác định hoặc 0, JavaScript sẽ giả định như sau:
- Nếu chuỗi đầu vào bắt đầu bằng "0x" hoặc "0X", cơ số là 16 (hệ thập lục phân).
- Nếu chuỗi đầu vào bắt đầu bằng "0", cơ số là tám (bát phân). Tính năng này không phải là tiêu chuẩn và một số triển khai cố tình không hỗ trợ tính năng này (thay vào đó sử dụng cơ số 10). Vì lý do này, luôn chỉ định một cơ số khi sử dụng parseInt .
- Nếu chuỗi nhập bắt đầu bằng bất kỳ giá trị nào khác, cơ số là 10 (thập phân).
Nếu ký tự đầu tiên không thể được chuyển đổi thành một số, parseInt trả về NaN.
Và từ tiêu chuẩn ECMAScript 3 :
Khi cơ số là 0 hoặc không xác định và số của chuỗi bắt đầu bằng
chữ số 0, không theo sau là x hoặc X , thì việc triển khai có thể, theo quyết định của mình, giải thích số là số bát phân hoặc là số thập phân. Việc triển khai được khuyến khích để giải thích các số trong trường hợp này là số thập phân.
Phiên bản JavaScript mới nhất ( ECMAScript 5 ) loại bỏ hành vi này , nhưng bạn vẫn nên chỉ định cơ số để đáp ứng các trình duyệt cũ hơn.