JavaScript おれおれ Advent Calendar 2011 – 4日目
<input />の入力値は文字列なので、数値として扱うには変換してやる必要がありますね。そんなときには組み込み関数であるparseInt()が便利です。
var numText = document.getElementById('num').value;
var num = parseInt(numText);
console.log(num);
これで数字にしてくれます。
ところがこのコード、意図しない動作をする場合があります。
var num = parseInt("010");
console.log(num);
上記のコードのとき、何が出力されるでしょうか?
実は10にはなりません。8になります。parseInt()は基数変換の機能があるからです。
(基数て何?という方はググれば色々と解説がみつかります。中学校の数学の教科書にも乗っていたはず。)
JavaScriptの決まり事として"0"で始まる数値は8進数、というものがあります。ちなみに”0x"で始まるものは16進数です。(JavaScript以外の言語でもだいたいそうです。)
console.log(010); // => 8 console.log(0x10); // => 16
それをparseInt()も踏襲していて、自動的に基数を変換してくれるわけです。余計なお世話とは言ってあげないで!
第2引数で基数を指定する事ができます。
var num = parseInt("010", 10);
console.log(num);
これで安心。
以上、parseInt()を使う場合は(特に意図した場合を除き)必ず第2引数を指定するようにした方が良いというお話でした。