18

重複の可能性:
JavaScriptparseIntの8進数バグの回避策

私はjavascript関数に取り組んでおり、年、月、日付を宣言して日付オブジェクトを設定しています。ただし、月の値が08またはの場合09、 。0を使用するとが返されparseInt()ます。下記参照:

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

この問題を示すためにjsFiddleを作成しました。

http://jsfiddle.net/GhkEf/

なぜ戻っparseInt("08")てくるのですか?parseInt("09")0

4

4 に答える 4

45

これは、0で始まる数値が8進数と見なされるためです。そして、08は8進数で間違った数です。

parseInt('09', 10);代わりに使用してください。

于 2012-09-07T13:13:04.410 に答える
5

8進数として解析されています。radixのパラメータを使用しますparseInt

parseInt('08', 10);

更新:ES5の時点では、ブラウザーにこのバグはないはずです。8進数リテラルは、80o12進数と見なされる形式である必要があります。08ES5ではデフォルトで10進数と見なされるようになりましたが、すべてのブラウザがまだこれをサポートしていない可能性があるため、引き続きradixパラメータをに渡す必要があります。parseInt

于 2012-09-07T13:13:24.393 に答える
1

基数を含めることでこれを修正できます。例:

parseInt("08", 10); // outputs 8
于 2012-09-07T13:14:09.840 に答える
1

10の基数を追加する必要があります。

parseInt("08", 10);

一部の実装では、デフォルトで8進数になっています。

于 2012-09-07T13:14:20.947 に答える