2023年1月24日

型変換

ほとんどの場合、演算子と関数は、与えられた値を自動的に適切な型に変換します。

例えば、alert は表示するために任意の値 を自動的に文字列に変換します。数学演算は値を数値に変換します。

また、明示的に値を期待される型に変換する必要がある場合もあります。

今はオブジェクトについては触れません

この章では、オブジェクトについては扱いません。今のところ、プリミティブについてのみ説明します。

後ほど、オブジェクトについて学習した後、オブジェクトからプリミティブへの変換の章で、オブジェクトがどのように適合するかを見ていきます。

文字列変換

値の文字列形式が必要な場合、文字列変換が行われます。

例えば、alert(value) は値を表示するためにそれを行います。

また、String(value) 関数を呼び出して値を文字列に変換することもできます。

let value = true;
alert(typeof value); // boolean

value = String(value); // now value is a string "true"
alert(typeof value); // string

文字列変換はほとんどの場合明らかです。false"false" に、null"null" になります。

数値変換

数学関数と式における数値変換は自動的に行われます。

例えば、除算 / が数値でないものに適用されるとき。

alert( "6" / "2" ); // 3, strings are converted to numbers

Number(value) 関数を使用して、value を明示的に数値に変換することができます。

let str = "123";
alert(typeof str); // string

let num = Number(str); // becomes a number 123

alert(typeof num); // number

明示的な変換は、テキストフォームのような文字列ベースのソースから値を読み取るものの、数値が入力されることを期待する場合によく必要となります。

文字列が有効な数値でない場合、このような変換の結果は NaN になります。例えば、

let age = Number("an arbitrary string instead of a number");

alert(age); // NaN, conversion failed

数値変換のルール

結果...
undefined NaN
null 0
true および false 1 および 0
文字列 先頭と末尾の空白文字(スペース、タブ\t、改行\nなどを含む)は削除されます。残りの文字列が空の場合、結果は 0 になります。それ以外の場合は、文字列から数値が「読み取られます」。エラーは NaN になります。

alert( Number("   123   ") ); // 123
alert( Number("123z") );      // NaN (error reading a number at "z")
alert( Number(true) );        // 1
alert( Number(false) );       // 0

nullundefined はここで異なる動作をすることに注意してください。 null はゼロになるのに対し、undefinedNaN になります。

ほとんどの数学演算子もこのような変換を実行します。それについては次の章で説明します。

真偽値変換

真偽値変換は最もシンプルな変換です。

論理演算(後で条件テストやその他の類似のものを学びます)で発生しますが、Boolean(value) を呼び出して明示的に実行することもできます。

変換ルール

  • 0、空の文字列、nullundefinedNaNのように、直感的に「空」である値は false になります。
  • その他の値は true になります。

例えば

alert( Boolean(1) ); // true
alert( Boolean(0) ); // false

alert( Boolean("hello") ); // true
alert( Boolean("") ); // false
注意してください: ゼロの文字列 "0"true です

いくつかの言語 (特に PHP) では、"0"false として扱います。しかし、JavaScript では、空でない文字列は常に true です。

alert( Boolean("0") ); // true
alert( Boolean(" ") ); // spaces, also true (any non-empty string is true)

まとめ

最も広く使用されている3つの型変換は、文字列、数値、真偽値への変換です。

文字列変換 – 何かを出力するときに発生します。String(value) で実行できます。文字列への変換は、通常プリミティブ値に対しては明らかです。

数値変換 – 数値演算で発生します。Number(value) で実行できます。

変換は次のルールに従います

結果...
undefined NaN
null 0
true / false 1 / 0
文字列 文字列は「そのまま」読み取られ、両側の空白文字(スペース、タブ\t、改行\nなどを含む)は無視されます。空の文字列は 0 になります。エラーは NaN になります。

真偽値変換 – 論理演算で発生します。Boolean(value) で実行できます。

次のルールに従います

結果...
0nullundefinedNaN"" false
その他の値 true

これらのルールのほとんどは理解しやすく、覚えやすいです。人が間違いを犯しやすい注目すべき例外は次のとおりです。

  • undefined は数値としては 0 ではなく NaN です。
  • "0"" " のようなスペースのみの文字列は、ブール値としては true です。

ここではオブジェクトについては触れません。JavaScript についてもっと基本的なことを学んだ後、オブジェクトに特化した章オブジェクトからプリミティブへの変換で後ほど戻ります。

チュートリアルマップ

コメント

コメントする前にこちらをお読みください…
  • 改善するための提案がある場合は、コメントの代わりにGitHub issueを提出またはプルリクエストを提出してください。
  • 記事の内容が理解できない場合は、詳しく説明してください。
  • コードを少し挿入する場合は、<code> タグを使用し、複数行の場合は <pre> タグで囲み、10行以上の場合はサンドボックス ( plnkr, jsbin, codepen…)