JavaScript では文字列と数値の四則演算を行うと、暗黙的な型の変換が行われるようになっているため、通常は数値が必要な場所で文字列をそのまま使うことができます。
演算を行う場合は、基本的に数値に変換されて計算されるのですが、例外的に +
演算子だけは常に文字列同士の結合として扱われます。
console.log('100' + 7); //=> '1007' (string) ★ここだけ文字列結合
console.log('100' - 7); //=> 93 (number)
console.log('100' * 7); //=> 700 (number)
console.log('100' / 7); //=> 14.285714285714286 (number)
console.log('100' % 7); //=> 2 (number)
数値とみなせない文字列と数値を四則演算した場合は、NaN
となります。
ただし、この場合も +
演算だけは文字列結合になります。
console.log(50 + '30a'); //=> '5030a' (string) ★ここだけ文字列結合
console.log(50 - '30a'); //=> NaN (number)
console.log(50 * '30a'); //=> NaN (number)
console.log(50 / '30a'); //=> NaN (number)
console.log(50 % '30a'); //=> NaN (number)
NaN
の型も number です(typeof(NaN) === 'number'
)。
Number
関数を使用すると、明示的に文字列を数値に変換することができます。
var s = '123';
var n = Number(s);
console.log(typeof n); //=> number
Number
関数は、数値とみなせない文字列が渡されると NaN
を返します。
NaN
は偽値として扱われるので、数値に変換できない場合に 0
をデフォルト値として使用するようにするには、下記のように ||
演算子を利用できます。
var s = 'foo';
var n = Number(s) || 0; // 数値に変換できない場合はデフォルト値の 0 とする
ただし、上記のような ||
を使用したショートカット記法は、デフォルト値として 0 を使用するケースでしか使用できません。
例えば、下記のようなコードは意図とは異なる動きをします。
var n = Number(s) || -1; // 数値に変換できない場合はデフォルト値の -1 とする
このように記述してしまうと、変換前の文字列が '0'
だった場合にも、-1 に変換されてしまいます(正しくは 0 となって欲しい)。
このような誤変換を防ぐには、下記のように明示的に isNan
関数を使用してチェックを行うようにします。
var s = 'foo';
var n = Number(s);
if (isNaN(n)) {
n = -1; // 数値に変換できない場合のデフォルト値
}
String
関数を使用すると、明示的に数値を文字列に変換することができます。
var n = 123;
var s = String(n);
console.log(typeof s); //=> string
数値と文字列の +
演算結果が文字列になることを利用して、次のように記述することもできます。
var n = 123;
var s = n + '';
Number
オブジェクトの toString
メソッドを使用して文字列に変換することもできます。
toString
特有の機能として、基数を指定して文字列に変換する機能があります。
console.log((255).toString()); //=> '255'(10進数表記)
console.log((255).toString(2)); //=> '11111111'(2進数表記)
console.log((255).toString(8)); //=> '377'(8進数表記)
console.log((255).toString(10)); //=> '255'(10進数表記)※パラメータなしと同じ
console.log((255).toString(16)); //=> 'ff'(16進数表記)
ちなみに、toString
の基数は 2~36 の範囲で指定することができます。
つまり、0~9、a~z の 36 文字を使った 36 進数にまで対応しています。