では、前回の初級(基本的な型変換ルール)より一歩進んで、中級・上級レベルの「等価演算子(== / ===)」練習問題を紹介します。
JavaScript の「暗黙の型変換」や「参照の比較」など、理解している人でもうっかり間違えやすい問題を中心にしています。
中級問題(10問)
各式の結果を「true」「false」のどちらかで答えてください。
答えのあとに 詳しい解説 を載せています。
🧩 Q1
'0' == false
JavaScript✅ 答え:true
🔍 解説:
false→ 数値に変換されて0'0'→ 数値に変換されて0- →
0 == 0⇒true
🧩 Q2
0 === false
JavaScript✅ 答え:false
🔍 解説:
===は型まで比べる。0(number)とfalse(boolean)は型が違う ⇒false
🧩 Q3
' \t\r\n' == 0
JavaScript✅ 答え:true
🔍 解説:
- 文字列
' \t\r\n'(空白・タブ・改行)を数値に変換すると0 - →
0 == 0⇒true
🧩 Q4
[] == ![]
JavaScript✅ 答え:true
🔍 解説:
![]→false(空の配列は truthy → 否定で false)- 比較するときに
[]→''(文字列)→ 数値0 false→ 数値0- →
0 == 0⇒true
🧩 Q5
null == 0
JavaScript✅ 答え:false
🔍 解説:null は undefined だけと等しい(特殊ルール)。
数値とは等しくならない。
🧩 Q6
[] == ''
JavaScript✅ 答え:true
🔍 解説:
[]→ 文字列'''' == ''⇒true
🧩 Q7
[1,2] == '1,2'
JavaScript✅ 答え:true
🔍 解説:
[1,2]→'1,2'に変換'1,2' == '1,2'⇒true
🧩 Q8
[] == 0
JavaScript✅ 答え:true
🔍 解説:
[]→''→ 数値0- →
0 == 0⇒true
🧩 Q9
[null] == ''
JavaScript✅ 答え:true
🔍 解説:
[null]→'null'ではなく' '(空文字)- →
'' == ''⇒true
🧩 Q10
[undefined] == 0
JavaScript✅ 答え:true
🔍 解説:
[undefined]→''→ 数値0- →
0 == 0⇒true
上級問題(10問)
型変換・参照比較・NaN・Object.is など、やや実務寄りのひっかけ問題です。
⚙️ Q1
{} == {}
JavaScript✅ 答え:false
🔍 解説:
オブジェクト比較は「参照が同じか」を比較。
別々に作った {} は中身が同じでも false。
⚙️ Q2
let a = {}; let b = a;
a == b
JavaScript✅ 答え:true
🔍 解説:
同じオブジェクトを参照しているため、true。
⚙️ Q3
NaN == NaN
JavaScript✅ 答え:false
🔍 解説:NaN は自分自身とも等しくない。
チェックには Number.isNaN() を使う。
⚙️ Q4
NaN === NaN
JavaScript✅ 答え:false
🔍 解説:=== でも NaN は自分自身と等しくならない。
⚙️ Q5
Object.is(NaN, NaN)
JavaScript✅ 答え:true
🔍 解説:Object.is は NaN を同一と認識する。
⚙️ Q6
+0 === -0
JavaScript✅ 答え:true
🔍 解説:=== では +0 と -0 は区別されない。
⚙️ Q7
Object.is(+0, -0)
JavaScript✅ 答え:false
🔍 解説:Object.is は +0 と -0 を区別する。
⚙️ Q8
'5' > 10
JavaScript✅ 答え:false
🔍 解説:
比較演算子でも暗黙の型変換あり。'5' → 数値 5、5 > 10 ⇒ false
⚙️ Q9
'abc' == new String('abc')
JavaScript✅ 答え:true
🔍 解説:new String('abc') はオブジェクト、== は内部で valueOf() により 'abc' に変換して比較する ⇒ true。
ただし === なら false。
⚙️ Q10
'abc' === new String('abc')
JavaScript✅ 答え:false
🔍 解説:
プリミティブ文字列とオブジェクトは型が違う ⇒ false。
まとめ(中級〜上級の理解ポイント)
| 分類 | 主な落とし穴 | 対策 |
|---|---|---|
| 型変換 | 空文字・配列・ブール値などが数値に変換される | === を使う |
| null / undefined | 特殊に == でのみ等しい | === で区別する |
| NaN | 自分自身とも等しくない | Number.isNaN() を使う |
| +0 / -0 | === では区別されない | Object.is() を使う |
| オブジェクト比較 | 参照比較になる | JSON.stringify などで内容比較する |
