カテゴリ: JavaScript 更新日: 2025/10/24

JavaScriptの条件式で型の違いに注意しよう!厳密比較と抽象比較

JavaScriptの条件式で型の違いに注意しよう!厳密比較と抽象比較
JavaScriptの条件式で型の違いに注意しよう!厳密比較と抽象比較

先生と生徒の会話形式で理解しよう

生徒

「先生、JavaScriptで値を比べるときに=====って違いがあるって聞いたんですが、どう違うんですか?」

先生

「いい質問ですね。これはJavaScriptの『比較演算子』の話で、型の違いをどう扱うかがポイントなんです。順を追って説明しますね。」

生徒

「型って何ですか?難しい言葉ですが…?」

先生

「型は『値の種類』のことです。例えば数字、文字列、真偽値(はい・いいえのようなもの)などがあります。JavaScriptでは同じ数字でも『文字の0』と『数字の0』は違う型なんですよ。」

生徒

「なるほど。じゃあ=====の違いは何ですか?」

先生

「それぞれ『抽象比較(ゆるい比較)』と『厳密比較(かたく比較)』と言います。具体例を使って説明しましょう。」

1. 抽象比較(==)とは?型を自動で変換して比較する

1. 抽象比較(==)とは?型を自動で変換して比較する
1. 抽象比較(==)とは?型を自動で変換して比較する

==は値が違う型でも、自動で型を変換してから比較します。だから型が違っても、意味が同じなら「等しい」と判定します。


console.log(0 == "0");    // true(数字の0と文字の"0"は等しいと判定)
console.log(false == 0);  // true(falseは数字の0と同じ扱い)
console.log(null == undefined); // true(特別な扱いで等しいと判定)

ただし、予期せぬ結果になることもあるので注意が必要です。

2. 厳密比較(===)とは?型も値も完全に同じか比較する

2. 厳密比較(===)とは?型も値も完全に同じか比較する
2. 厳密比較(===)とは?型も値も完全に同じか比較する

===は型が違ったら絶対に「違う」と判定します。値も型も両方同じときだけ「等しい」となります。


console.log(0 === "0");   // false(型が違うから等しくない)
console.log(false === 0); // false(型が違う)
console.log(null === undefined); // false(型も値も違う)
console.log(10 === 10);   // true(型も値も同じ)

型の違いによるミスを防ぎたいなら、===を使うのが安全です。

3. なぜ型の違いに注意が必要なのか?

3. なぜ型の違いに注意が必要なのか?
3. なぜ型の違いに注意が必要なのか?

JavaScriptは型変換が自動で行われるため、==を使うと意図しない判定結果になることがあります。特にプログラミング初心者は予測しにくい動きに戸惑うことが多いです。

例えば、数字と文字列を比較したとき、数字の「0」と文字列の「0」は違う型ですが、==では同じと判定されます。これがバグの原因になることがあります。

4. 抽象比較と厳密比較の使い分け方

4. 抽象比較と厳密比較の使い分け方
4. 抽象比較と厳密比較の使い分け方

基本的には型の違いでの誤解を避けるために、===の厳密比較を使うことをおすすめします。

ただし、nullundefinedの判定では==を使うことが便利なケースもあります。


// nullかundefinedかをまとめて判定したいとき
let value = null;
if (value == null) {
  console.log("値はnullかundefinedです。");
}

このようにケースによって使い分けることが重要です。

5. 文字列と数字を比較する注意点

5. 文字列と数字を比較する注意点
5. 文字列と数字を比較する注意点

文字列と数字を比較するとき、==は自動で数字に変換して比較するため予想外の結果になることがあります。


console.log("5" == 5);    // true(文字列"5"は数字の5に変換されて等しい)
console.log("5" === 5);   // false(型が違うので等しくない)

なので、型の違いに注意しながら書くことが大切です。

6. 真偽値(Boolean)との比較の注意

6. 真偽値(Boolean)との比較の注意
6. 真偽値(Boolean)との比較の注意

false0や空文字などは==だと同じと判定されることがあります。


console.log(false == 0);    // true
console.log(false == "");   // true
console.log(false === 0);   // false
console.log(false === "");  // false

意図しない判定を防ぐためにも、できるだけ===を使いましょう。

7. typeof演算子で型を確認する方法

7. typeof演算子で型を確認する方法
7. typeof演算子で型を確認する方法

比較の前に、変数の型を調べたい場合はtypeof演算子を使うと便利です。


let x = "10";
console.log(typeof x);  // "string"

let y = 10;
console.log(typeof y);  // "number"

型を知ることで、比較の際に誤解を減らせます。

8. 実践例:厳密比較を使った安全な条件式

8. 実践例:厳密比較を使った安全な条件式
8. 実践例:厳密比較を使った安全な条件式

例えば、ユーザーの入力値をチェックするときは、厳密比較を使うと安全です。


// ユーザーの入力が数字の10かどうかを判定
let input = "10";

if (input === 10) {
  console.log("入力は数字の10です。");
} else {
  console.log("入力は数字の10ではありません。");
}

この場合は「数字の10」と「文字列の"10"」は違うと判定されます。

関連記事:
カテゴリの一覧へ
新着記事
New1
JavaScript
JavaScriptの条件式におけるnull・undefined判定のコツ!初心者でもわかる判定方法ガイド
New2
JavaScript
JavaScriptの条件式で論理演算子(&&, ||, !)を活用する方法!初心者でもわかる使い方ガイド
New3
TypeScript
TypeScriptでエラー処理を共通関数化して効率的に開発しよう!初心者向け例外処理ガイド
New4
JavaScript
JavaScriptの条件式における比較演算子の使い方まとめ!初心者でもわかる基本ルールと活用法
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
JavaScript
JavaScriptのtoStringとString関数の違いを初心者向けに解説
No.3
Java&Spring記事人気No3
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】
No.4
Java&Spring記事人気No4
JavaScript
JavaScriptで統一感のあるコードを書くための基本ルール完全ガイド初心者向けコーディング規約入門
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptのonclick・onchangeなどの基本イベントを理解しよう
No.6
Java&Spring記事人気No6
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.7
Java&Spring記事人気No7
TypeScript
TypeScriptのnever型を使ったエラーハンドリング!例外処理を極める安全なコードの書き方
No.8
Java&Spring記事人気No8
JavaScript
JavaScriptの数値フォーマット(小数点以下の桁数調整)を学ぼう