重複の可能性:
JavaScriptparseIntの8進数バグの回避策
parseIntメソッドを使用して文字列を解析すると、無効な出力が返されます。
コード:
parseInt("08");
例外出力:
8
実際の出力:
0
コード[これは正しく出力を返します]:
parseInt("8")
出力:
8
なぜそれが起こるのですか?
重複の可能性:
JavaScriptparseIntの8進数バグの回避策
parseIntメソッドを使用して文字列を解析すると、無効な出力が返されます。
コード:
parseInt("08");
例外出力:
8
実際の出力:
0
コード[これは正しく出力を返します]:
parseInt("8")
出力:
8
なぜそれが起こるのですか?
ベースを指定する必要があります。
parseInt("08",10); //=>8
それ以外の場合、JavaScriptは、ユーザーが10進数、16進数、または2進数のいずれであるかを認識しません。(これは、parseIntを使用する場合に常に使用する必要があるベストプラクティスです。)
こちらもご覧くださいNumber
:
Number("08"); // => 8
parseIntにその10ベースを伝える必要があります。
parseInt("08", 10);
基数パラメーターを省略した場合、JavaScriptは次のことを想定します。
文字列が「0x」で始まる場合、基数は16(16進数)です。
文字列が「0」で始まる場合、基数は8(8進数)です。この機能は非推奨です。文字列が他の値で始まる場合、基数は10(10進数)です。
先行ゼロのある文字列は、多くの場合、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