ドキュメントの引用 ( MDN ):
等しい (==)
2 つのオペランドが同じ型でない場合、JavaScript はオペランドを変換してから、厳密な比較を適用します。オペランドのいずれかが数値またはブール値の場合、可能であればオペランドは数値に変換されます。そうでなければ、どちらかのオペランドが文字列の場合、可能であればもう一方のオペランドが文字列に変換されます。
ここでのa
オペランドの型は であるためNumber
、b
Number にも変換されます。とNumber('')
評価され0
ます。
これは時々非常に驚くべきことです。たとえば、次のように考えてください。
console.log(0 == '0'); // true
console.log(0 == ''); // true
console.log('' == '0'); // O'RLY?
...またはこれ:
console.log(false == undefined); // false
console.log(false == null); // false
console.log(null == undefined); // fal.... NO WAIT!
===
...そしてそれが、代わりに(厳密な等値)演算子を使用することがほとんど常に推奨される理由です。