7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JavaScriptのNumber、parseIntの落とし穴(基数を与えないと想定外の数値に変換される)

Last updated at Posted at 2017-03-29

疑問

parseInt を使ってると、たまーに想定外の数値を返してくるのはなに?

仕様

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 使え

7
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?