JavaScript: JavaScript 型変換

最終更新:2026-10-13

型変換は JavaScript で最もエラーが発生しやすい部分です。フォームに入力した数字?実は文字列だった!"5" + 3 が 8 ではなく "53" になる。初心者は誰もがこのような「驚き」に遭遇します。

関連するグローバルメソッド:parseFloat() parseInt() Number()

1. 型変換の方法と落とし穴

HTML フォームの input 値は type="number" でも常に文字列です。算術演算を行う前に型を変換しないと、結果は予測不能になります。

HTML
<div id="demo"></div>
<script>
const input = "42";
const result = input + 8;
document.getElementById("demo").textContent = 'input + 8 = ' + result + '(型: ' + typeof result + ')';
</script>

(2) 明示的な変換:String()、Number()、Boolean()

変換関数を明示的に呼び出すことで意図が明確になります。推奨されるアプローチです。

変換 構文 例
文字列へ String(value) String(123) → "123"
数値へ Number(value) Number("42") → 42
真偽値へ Boolean(value) Boolean(0) → false

(3) 暗黙の変換:+ による連結と == による比較

JavaScript エンジンは自動的な型変換を行いますが、しばしば予期しない結果を生みます。

HTML
<script>
console.log("5" + 3);       // "53"(数値 3 が文字列に変換)
console.log("5" - 3);       // 2(文字列 "5" が数値に変換)
console.log("" == 0);       // true(空文字列が 0 に変換)
console.log(null == undefined); // true
</script>

(4) よくある落とし穴

面接や実際の開発で高頻度に遭遇する落とし穴です。

HTML
<script>
console.log("5" + 3);        // "53"   + は文字列を見ると連結する
console.log("5" - 3);        // 2      - は引き算のみ。文字列を数値に変換
console.log("5" * 3);        // 15     * も数値に変換
console.log(true + 1);       // 2      true は 1 に変換
console.log(false + 1);      // 1      false は 0 に変換
console.log("" + 0);         // "0"    数値が文字列に変換
console.log("" == 0);        // true   両側が数値に変換
console.log(null == 0);      // false  null は undefined とのみ緩い等価
console.log("0" == false);   // true   両方とも 0 に変換
</script>

このルールを覚えてください:+ は文字列に出会うと連結し、他のすべての算術演算子は文字列を数値に変換します。

(5) Number() 変換ルール

入力 結果
Number("42") 42
Number("3.14") 3.14
Number("") 0(空文字列 → 0。古典的な落とし穴)
Number(" ") 0(空白のみの文字列 → 0)
Number("42px") NaN(数値以外の文字を含む → NaN)
Number(true) 1
Number(false) 0
Number(null) 0
Number(undefined) NaN

空文字列が NaN ではなく 0 に変換されます。この設計で多くの開発者がつまずきました。

(6) Boolean() 変換ルール(falsy 値)

以下の6つの値は false に変換され、falsy 値と呼ばれます。それ以外はすべて true です。

HTML
<script>
console.log(Boolean(false));     // false
console.log(Boolean(0));         // false
console.log(Boolean(-0));        // false
console.log(Boolean(""));        // false
console.log(Boolean(null));      // false
console.log(Boolean(undefined)); // false
console.log(Boolean(NaN));       // false
</script>

注意:Boolean("0") は true ですし、Boolean([]) も true です。空でない文字列と空でない配列は truthy です。

(7) === 厳密等価と == 緩い等価

演算子 動作 推奨
=== 型が異なれば false を返す 常に使う
== 比較前に型を変換 避ける
HTML
<script>
console.log(5 === "5");   // false(型が異なる)
console.log(5 == "5");    // true(先に文字列が数値に変換)
console.log(null === undefined); // false
console.log(null == undefined);  // true
</script>

鉄則:常に === を使い、== は使わないこと。 何をしているか正確に理解している場合を除き(例:value == null は null と undefined の両方にマッチ)。


(8) サンプル:型変換の比較

▶ 試してみよう

(9) サンプル:Boolean() falsy 値クイックリファレンス

▶ 試してみよう

(10) サンプル:フォーム入力の計算

▶ 試してみよう

(11) サンプル:=== と == の比較

▶ 試してみよう

関連するグローバルメソッド:parseFloat() parseInt() Number()

❓ よくある質問

Q "5" - 3 が 2 になってエラーにならないのはなぜですか?
A - 演算子は数値演算のみを行うため、JavaScript が自動的に文字列を数値に変換します。+ 演算子だけが曖昧で(加算と連結の両方がある)、文字列を見ると連結します。他のすべての演算子(-、*、/、%)は常に数値に変換します。
Q Number("") が NaN ではなく 0 を返すのはなぜですか?
A これはレガシーな設計上の選択です。空文字列は「数値がない」と見なされ、0 に相当します。つまり、Number(input.value) は空のフィールドで NaN ではなく 0 を返すため、下流のロジックを誤らせる可能性があります。空の値をチェックするには、先に input.value.trim() === "" を使ってください。
Q null == 0 が false なのはなぜですか?
A == 比較では、null は undefined とのみ変換されます。数値には変換されません。そのため、null == 0 は false ですが、null == undefined は true です。これは仕様で定義された特殊ケースです。

📖 まとめ

📝 練習問題

  1. コードを実行せずに、これらの式の結果を予測してください:"10" + 5、"10" - 5、"10" * "2"、true + true、Boolean("false")、"1" == 1、"1" === 1。その後、コードを書いて検証してください。
  2. calculateBMI(weight, height) 関数を書きましょう。パラメータはフォーム入力(文字列)から取得します。関数内部で型変換してから BMI を計算し、空または無効な入力を処理してください(エラーメッセージを返す)。
  3. strictCompare(a, b) 関数を書きましょう。=== のみを使って比較してください。型が異なる場合は "型が異なります。比較できません" を直接返し、型が一致する場合は比較結果を返してください。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%