疑問
parseInt
を使ってると、たまーに想定外の数値を返してくるのはなに?
仕様
- 第1引数のstringが「0」で始まるときは、第2引数のradixは8(8進法)または10(10進法)とされます。厳密には、基数がどちらになるかは実装によります。ECMAScript 5 の仕様では10(10進法)です。ただし、まだすべてのブラウザがサポートしている訳ではありません。したがって、parseInt()関数を使うとき基数は必ず与えてください。
0
から始まる文字列を与えると8進数で返してくる!!
さらに 0x
から始まる文字列を与えると16進数で返してくる!!
検証
console.log(parseInt('020')); // 16
console.log(parseInt('0x20')); // 32
えーひどい
対策
parseIntの場合、必ず基数をつけましょう
console.log(parseInt('020', 10)); // 20
Number
の回避策は知らん、 parseInt
使え