JavaScriptで以下を実行してみてください。
parseInt('01'); //equals 1
parseInt('02'); //equals 2
parseInt('03'); //equals 3
parseInt('04'); //equals 4
parseInt('05'); //equals 5
parseInt('06'); //equals 6
parseInt('07'); //equals 7
parseInt('08'); //equals 0 !!
parseInt('09'); //equals 0 !!
JavaScriptが先行ゼロが8進整数を示すと考える難しい方法を学んだところです。base -8 がない"8"
か"9"
、8であるので、関数はゼロを返します。好むと好まざるとにかかわらず、これは仕様によるものです。
回避策は何ですか?
注:完全を期すために、私は解決策を投稿しようとしていますが、それは私が嫌う解決策なので、他の/より良い答えを投稿してください。
更新:
JavaScript標準の第5版(ECMA-262)では、この動作を排除する重大な変更が導入されています。Mozillaは良い記事を書いています。
10
解析する数値の前にが付いていない限り、基本パラメーターはデフォルトで(10進数)になります0x
。たとえば0xFF
、基本パラメーターはデフォルトで16になります。うまくいけば、1日、この問題遠い思い出になります。
+'08' === 8
ですか?ほんとだ!たぶんあなたは本当にparseInt
あなたの本当のコードが必要ですが、上記のものは必要ありません。
Number('08')
0
かundefined
文字列の数はで始まる0
が続かない数字x
やX
、実装は、その裁量で、オクタルあるとしてまたは小数であるとしてどちらかの番号を解釈することがあります。実装は10進数であるとして、この場合の数字を解釈することが奨励されています。」(私の強調)