1

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

parseIntメソッドを使用して文字列を解析すると、無効な出力が返されます。

コード:

parseInt("08");

例外出力:

8

実際の出力:

0

コード[これは正しく出力を返します]:

parseInt("8")

出力:

8

なぜそれが起こるのですか?

4

4 に答える 4

3

ベースを指定する必要があります。

parseInt("08",10); //=>8

それ以外の場合、JavaScriptは、ユーザーが10進数、16進数、または2進数のいずれであるかを認識しません。(これは、parseIntを使用する場合に常に使用する必要があるベストプラクティスです。)

于 2012-06-26T07:59:09.483 に答える
2

こちらもご覧くださいNumber

Number("08"); // => 8
于 2012-06-26T08:01:50.350 に答える
1

parseIntにその10ベースを伝える必要があります。

parseInt("08", 10);

JavaScript parseInt()関数

基数パラメーターを省略した場合、JavaScriptは次のことを想定します。

文字列が「0x」で始まる場合、基数は16(16進数)です。

文字列が「0」で始まる場合、基数は8(8進数)です。この機能は非推奨です。文字列が他の値で始まる場合、基数は10(10進数)です。

http://jsfiddle.net/YChK5/

于 2012-06-26T07:59:23.693 に答える
0

先行ゼロのある文字列は、多くの場合、8進値として解釈されます。8進数は、0〜7の数字だけが意味を持つことを意味するため、「08」は「0」に変換されます。この問題を修正するためのベースを指定します。

parseInt("08", 10); // base 10

いつものように、MDNは優れた情報源です: https ://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt#Octal_Interpretations_with_No_Radix

于 2012-06-26T08:01:52.463 に答える