JS

==・=== の違い

初級

読み方:イコールイコール・イコールイコールイコール のちがい|英語:== vs ===

==は型変換してから比較(ゆるい比較)、===は型も含めて比較(厳密比較)。===を使うのが安全。

やさしい説明

== は型を変換してから比較します。=== は型も値も完全に一致するか比較します。バグを防ぐために === を使いましょう。

== は「1 と "1" は同じ」と判断します(数値と文字列を自動変換)。=== は「型が違うから別物」と正しく判断します。

ESLint などのツールも === の使用を推奨しています。== を使う正当な理由はほとんどありません。

具体例・使い方

// == は型変換して比較(予想外の結果になる)
1 == "1"     // true(文字列→数値に変換)
0 == false   // true
"" == false  // true
null == undefined // true

// === は型も値も厳密に比較(安全)
1 === "1"    // false(型が違う)
0 === false  // false
null === undefined // false

== の型変換でよく混乱するケース

// 直感に反する == の結果(全部 true)
"" == 0         // true(空文字 → 数値0に変換)
"0" == false    // true
[] == false     // true(配列 → 空文字 → 0に変換)
null == undefined  // true
"	
" == 0     // true(空白文字 → 0

// === なら全部 false(期待通り)
"" === 0        // false
"0" === false   // false
null === undefined // false

このように == の変換ルールはほぼ覚えられません。=== を使えばこれらの問題は一切起きません。

実際のコードでの使い方

// ✅ 基本は === を使う
const input = document.getElementById("age").value; // "18"(文字列)
if (input === "18") { /* 文字列と比較 */ }
if (Number(input) === 18) { /* 数値に変換してから比較 */ }

// ✅ null/undefined 両方を一度にチェックしたいときだけ == が便利
function greet(name) {
  if (name == null) { // name が null または undefined のとき
    return "名無しさん";
  }
  return name;
}

// ❌ これは書かない
if (score == "0") { ... } // 型を明確にして === を使う

いつ使う?

値を比較するときは常に === を使うのが原則です。== を使う場面は value == null(null と undefined を同時にチェック)くらいで、それ以外ではほぼ不要です。

間違いやすいポイント

❌ == の型変換ルールが複雑すぎる

"" == 0 が true、"0" == false が true など、直感に反する結果が多く予測不能です。=== を使えばこの問題は起きません。

❌ = と == と === を混同する

= は代入(値を入れる)、== は緩い比較、=== は厳密な比較です。if文の条件式で = を書くと常にtrueになるバグが発生します。

よくある疑問

Q: なぜ===を使うべきなの?

A: ==だと「1」と1が同じと判定されるなど、予想外の結果になることがあります。===なら型が違えば必ずfalseです。

Q: ==を使っていい場面はある?

A: null == undefinedの判定に使うことがありますが、初心者のうちは常に===を使いましょう。

関連用語

  • JavaScript — == と === が使われる言語
  • 変数 — 比較する値を格納する

📖 関連レッスン

レッスンを見る →

関連ブログ記事

⚠️ 関連するエラー

❓ 関連するQ&A