JavaScript の 8 進数の危険: parseInt の誤動作の回避策
JavaScript の parseInt 関数は、先頭にゼロが付いている数値に遭遇するとつまずく可能性があります。この問題は、先頭のゼロを 8 進数として解釈する傾向があり、誤った結果が生じることが原因です。
例:
parseInt('01'); // 1 parseInt('08'); // 0 (invalid octal digit)
回避策:
最も簡単な解決策は、数値の基数、つまり基数を明示的に指定することです。これは、parseInt の 2 番目のパラメータを使用して行うことができます:
parseInt('08', 10); // 8 (specifying base 10)
あるいは、Number コンストラクタを使用して次のことを行うこともできます。先頭に付いているものを含む数値を解析します。ゼロ:
Number('08'); // 8
もう 1 つの方法は、文字列を解析する前に Base 10 に変換することです。
parseInt(parseInt('08', 8).toString(), 10); // 8 (convert octal to base 10)
正規表現を使用して先頭のゼロを削除できます:
parseInt(/^0+(.*)$/gm('008')); // 8 (match and capture non-zero digits)
注:
JavaScript 5th Edition (ECMA-262)、parseInt の動作が変更され、8 進数の解釈の問題が解消されました。ただし、古いバージョンの JavaScript との互換性を確保するため、先頭にゼロが含まれる数値に遭遇した場合は、上記の回避策のいずれかを使用することをお勧めします。
以上がJavaScript での parseInt の 8 進数解釈の問題を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。