健康意識の高まり

いろんなメモなど

javascript で "08" "09" を parseInt に渡すと Android では 0 が返る問題

解決方法

parseInt に基数を指定する。

parseInt( '08', 10 );

Number 関数を利用する。

Number( '08' );

背景

PCブラウザ、iPhone のサファリでは問題なかったのに、
Android の標準ブラウザでだけは、'08' や '09' を parseInt した結果が 0 になってしまっていた。
Why Javascript Returns Zero For parseInt('08') and parseInt('09')? | Ventanazul によると、
parseInt では頭に「0」がつくと、8進数と解釈するらしい。
08 や 09 という表現は8進数では存在しないので、0が返るという。

なので、parseInt に基数を指定するか、あるいは Number 関数を使えば、期待する値が返ってくる。
実際の動作はこちらで確認できます:[js] parseInt, Number の比較 - jsdo.it - Share JavaScript, HTML5 and CSS
アンドロイド端末でアクセスすれば、parseInt の結果が 0 になるはず。

なぜ android だけこうなるのかはよくわからない・・・。
js のバージョンの違いかと思って javascript version in Android - Stack Overflow
参考にしてみたけど、そういうわけでもないようです。