==・=== の違い
初級読み方:イコールイコール・イコールイコールイコール のちがい|英語:== 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 — == と === が使われる言語
- 変数 — 比較する値を格納する
📖 関連レッスン
レッスンを見る →