🧊

JavaScriptにおける数値⇔文字列の型変換あれこれ

気になったら即調べるが吉、ということで。

数値→文字列

var num = 123;

// わかりやすい
String(num); // "123"
num.toString(10); // "123"

// この用途では使ったこと無い
num.toFixed() // "123"

// なるほど
num + ''; // "123"

文字列→数値

var str = '123';

// わかりやすい
Number(str); // 123
parseInt(str, 10); // 123
parseFloat(str); // 123

// なるほど
str - 0; // 123
str * 1; // 123
str / 1; // 123

// すっきりやけど知らん人は読めない
+str; // 123
-(-str); // 123
~~str; // 123
str&-1; // 123
str|0; // 123
str^0; // 123
str>>0; // 123
str<<0; // 123

// 使っちゃダメってばっちゃが言ってた
// eval(str) // 123

ありがちなpx→数値変換

var px = '123px';

Number(px); // NaN
parseInt(px, 10); // 123
parseFloat(px); // 123

px - 0; // NaN
px * 1; // NaN
px / 1; // NaN

+px; // NaN
~~px; // 0

// eval(px) // SyntaxError: Unexpected token ILLEGAL

// 番外
px.substr(0, px.length-2); // 123
px.split('px')[0]; // 123

せっかく関数用意してあるんやから、大人しくそれ使っとけってことですね。
後から読んでもわかりやすいし。

先頭に0がある文字列→数値変換

var str = '0123';

Number(str); // 123
parseInt(str, 10); // 123
parseFloat(str); // 123

str - 0; // 123
str * 1; // 123
str / 1; // 123

+str; // 123
~~str; // 123
str|0; // 123

eval(str) // 83

evalとはここで別れましょう・・。

先頭に半角スペースがある文字列→数値変換

var str = ' 123';

Number(str); // 123
parseInt(str, 10); // 123
parseFloat(str); // 123

str - 0; // 123
str * 1; // 123
str / 1; // 123

+str; // 123
~~str; // 123
str|0; // 123

eval(str) // 123

空白はあってないものらしい。

1年経ってみての感想

20140624: なにげにアクセス数があるみたいなので、今のきもちを追記。

文字列→数値なら

'123'|0; // 123

ってすることが多いかなー。
やっぱりすっきり書けるのが良いですね。
ただ小数点が入っちゃうと挙動が変わってくるので注意。

'123.5'|0; // 123

+'123.5'; // 123.5

数値→文字列なら

''+123; // "123"

かなー。
正直こんなことする機会ないですね。