代入(=)と比較(===)の混同
📝 問題の再掲
Q12: if (score = 80) はどう動く?
正答: score に 80 が代入され、常に true になる
⚠️ よくある間違い
数学では「=」は「等しい」ですが、プログラミングでは「代入」です。エラーにならないため、バグに気づきにくいのが厄介です。
📖 段階的な説明
ステップ1:= と === の違い
=— 代入(右辺の値を左辺に入れる)===— 比較(両辺が等しいか判定する)
ステップ2:なぜ常に true になるのか
if (score = 80) は「score に 80 を代入し、その結果(80)を条件として評価する」という意味です。0 以外の数値は truthy なので、常に true になります。
ステップ3:デバッグ方法
if 文の条件が「いつも通る」「いつも通らない」場合は、= と === を確認しましょう。
💻 コード例
let score = 50;
// ❌ 代入になっている(常に true)
if (score = 80) {
console.log("合格"); // 常に実行される!
// score は 80 に書き換わっている
}
// ✅ 比較(正しい)
if (score === 80) {
console.log("合格"); // score が 80 のときだけ実行
}
// == と === の違い
console.log(1 == "1"); // true(型変換して比較)
console.log(1 === "1"); // false(型も含めて比較)
// → 基本的に === を使いましょう
🔗 関連知識
==は型変換してから比較するため予期しない結果になることがあります。===を使う習慣をつけましょう- ESLint などのツールを使うと、if 文内の代入を警告してくれます
✅ 確認問題
Q: 以下のコードで x の最終的な値は?
let x = 10;
if (x = 0) {
x = 5;
}
console.log(x);
答えを見る
0。x = 0 で x に 0 が代入され、0 は falsy なので if ブロックは実行されません。x は 0 のままです。