2012-09-07 62 views
12

thể trùng lặp:
Workarounds for JavaScript parseInt octal bugparseInt ("08") trả về 0

Tôi đã làm việc trên một hàm javascript, đặt đối tượng ngày bằng cách tuyên bố năm, tháng & ngày . Tuy nhiên, khi tháng có giá trị là 08 hoặc 09, 0 được trả lại khi sử dụng parseInt(). Xem dưới đây:

parseInt("01") //returns 1 
parseInt("02") //returns 2 
parseInt("03") //returns 3 
parseInt("04") //returns 4 
parseInt("05") //returns 5 
parseInt("06") //returns 6 
parseInt("07") //returns 7 
parseInt("08") //returns 0? 
parseInt("09") //returns 0? 
parseInt("10") //returns 10 

Tôi đã tạo một jsFiddle để chứng minh vấn đề này:

http://jsfiddle.net/GhkEf/

Tại sao parseInt("08")parseInt("09") trở 0?

+0

http://stackoverflow.com/questions/6410009/what-do-you-think-parseint08-will-return?rq=1 –

+2

Đọc tài liệu MDN: https://developer.mozilla.org/en- US/docs/JavaScript/Reference/Global_Objects/parseInt Vấn đề này cũng được ghi thành tài liệu –

+0

@ ŠimeVidas Ahh tất nhiên! Thứ sáu buổi chiều nấc cục! Cảm ơn phản hồi của bạn – Curt

Trả lời

37

Đó là vì số bắt đầu bằng 0 được coi là bát phân. Và 08 là một số sai trong bát phân.

Sử dụng parseInt('09', 10); để thay thế.

+0

cảm ơn. Bạn đã tiết kiệm thời gian của tôi. –

+2

Điều này chỉ xảy ra trên IE8. –

+0

Cảm ơn rất nhiều. Đây là câu hỏi và câu trả lời rất hữu ích. –

4

Nó đang được phân tích cú pháp dưới dạng số bát phân. Sử dụng thông số radix trong parseInt.

parseInt('08', 10);

Cập nhật: Tính đến ES5, trình duyệt nên không có lỗi này. Chữ số thập phân yêu cầu phải ở dạng 0o12 để được coi là số Octal. 08 theo mặc định hiện nay được coi là một số thập phân trong ES5, tuy nhiên, tất cả các trình duyệt có thể không hỗ trợ điều này, vì vậy bạn nên tiếp tục vượt qua các tham số radix-parseInt

1

Bạn có thể khắc phục điều này bằng cách đưa vào các cơ số, ví dụ:

parseInt("08", 10); // outputs 8 
1

Bạn cần phải thêm một cơ số mười:

parseInt("08", 10); 

Triển khai một số mặc định để bát phân.

Các vấn đề liên quan