型変換のルール(文字列、数値、論理値)
JavaScript で使用される色々なデータ型の値は、必要に応じて自動的に型が変換されます。例えば文字列に対して別のデータ型の値を + 演算子で連結しようとすると自動的に文字列に変換された上で連結が行われます。ここでは型変換が行われるときにどのように数値や文字列などに変換されるのかについて解説します。
(Last modified: )
文字列への変換
値が文字列に変換されるのは、例えば「+」演算子の左辺または右辺が文字列であった場合にもう片方の値は自動的に文字列に変換されます。
'num = ' + 値
また次のように明示的に文字列に変換することもできます。
String(値) 値.toString()
文字列以外のデータ型の値が文字列に変換される場合にどのように変換されるのかは次の通りです。
| 種類 | 値 | 文字列 |
|---|---|---|
| 数値 | 10 | "10" |
| -18.334 | "-18.334" | |
| 0x1A | "26" | |
| 3.14e6 | "3140000" | |
| 長整数 | 1250n | "1250" |
| 論理値 | true | "true" |
| false | "false" | |
| オブジェクト | {1:'Apple', 2:'Lemon'} | [object Object] |
| ['Apple', 'Lemon'] | Apple,Lemon | |
| function(x){return x;} | function(x){return x;} | |
| その他 | undefined | "undefined" |
| null | "null" | |
| NaN | "NaN" | |
| Infinity | "Infinity" |
数値を文字列に変換する場合、記述した数値がそのまま文字列となりますが 16 進数形式の場合は 10 進数にしてから文字列となり、指数表現の場合は小数点形式にしてから文字列となります。
また長整数型の値を文字列に変換する場合、末尾の 'n' は削除されて文字列となります。
オブジェクト型を文字列に変換する場合、オブジェクト毎に用意されている toString メソッドが呼び出された結果となります。どのように変換されるのかはオブジェクト毎に異なります。
シンボルについては自動的に文字列への変換は行われません。
let symbol = Symbol(); let str = 'Symbol is ' + symbol; >> Uncaught TypeError: Cannot convert a Symbol value to a string
シンボルを文字列に変換する必要がある場合は toString メソッドを使用してください。
let symbol = Symbol();
console.log(symbol.toString());
>> Symbol()
数値への変換
値が数値に変換されるのは、例えば「-」や「*」演算子などで数値と演算を行った場合、対象の値は数値に自動的に変換されます。(「+」演算子の場合は異なりますので注意して下さい)。
num = 値 - 0
また次のように明示的に数値に変換することもできます。
Number(値)
数値以外のデータ型の値が数値に変換される場合にどのように変換されるのかは次の通りです。
| 種類 | 値 | 数値 |
|---|---|---|
| 文字列 | "184" | 184 |
| "-25.42" | -25.42 | |
| "apple" | NaN | |
| 長整数 | 1250n | 1250 |
| 論理値 | true | 1 |
| false | 0 | |
| オブジェクト | {1:'Apple', 2:'Lemon'} | NaN |
| ['Apple', 'Lemon'] | NaN | |
| [78] | 78 | |
| function(x){return x;} | NaN | |
| その他 | undefined | NaN |
| null | 0 | |
| NaN | NaN |
文字列を数値に変換する場合、文字列が数字で構成された文字列(例えば '123' や '3.14' など)の場合は文字列が表す数値(例えば 123 や 3.14 )に変換されます。ただし 16 進数形式の場合は 10 進数の数値となり、指数表現の場合は小数点形式の数値となります。文字列に数値ではない文字が含まれている場合は NaN となります。
長整数型の値は数値に変換することができますが、長整数型と整数の演算は行うことができないので Number 関数を使用するか parseInt 関数を使用します。詳しくは「長整数リテラルを数値に型変換する」を参照されてください。
null は数値に変換すると 0 となります。 undefined や NaN は数値に変換すると NaN となります。
オブジェクト型を文字列に変換する場合、オブジェクト毎に用意されている toString メソッドが呼び出されていったん文字列に変換されたあと数値に変換されます。ほとんどのオブジェクトは NaN に変換されますが、要素が 1 つだけで値として数値又は数字から構成される文字列が格納されている配列の場合はその格納されていた数値に変換されます。
console.log(Number(['abc'])); >> NaN console.log(Number([45])); >> 45
シンボルについては自動的に数値への変換は行われません。
let symbol = Symbol(); let num = symbol - 0; >> Uncaught TypeError: Cannot convert a Symbol value to a number
論理値への変換
値が論理値に変換されるのは、例えば if 文の条件式などに値が記述された場合です。
if (値){
...
}
また次のように明示的に論理値に変換することもできます。
Boolean(値)
論理値以外のデータ型の値が論理値に変換される場合にどのように変換されるのかは次の通りです。
| 種類 | 値 | 論理値 |
|---|---|---|
| 数値 | 45 | true |
| 0 | false | |
| -4.84 | true | |
| 長整数 | 1250n | true |
| 0n | false | |
| 文字列 | "apple" | true |
| "" | false | |
| オブジェクト | {1:'Apple', 2:'Lemon'} | true |
| {} | true | |
| ['Apple', 'Lemon'] | true | |
| [] | true | |
| function(x){return x;} | true | |
| その他 | undefined | false |
| null | false | |
| NaN | false | |
| Infinity | true | |
| シンボル | シンボル | true |
数値を論理値に変換する場合、 0 は false となり 0 以外の数値はすべて true となります。長整数型も 0n は false となり 0n 以外の長整数型の値はすべて true となりす。
文字列を論理値に変換する場合、 空文字は false となり空文字以外の文字列はすべて true となります。
オブジェクトはすべて true となります。空の配列や空のオブジェクトであっても true となります。シンボルも true となります。
undefined , null , NaN はすべて false となります。
console.log(Boolean(0)); >> false console.log(Boolean(1)); >> true console.log(Boolean('')); >> false console.log(Boolean('Hello')); >> true console.log(Boolean([])); >> true console.log(Boolean([120])); >> true
-- --
論理値が要求される場所で、どんな値が true とみなされるのか false とみなされるのかについて解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。