2つのオペランドが同じタイプではない場合、JavaScriptはオペランドを変換してから厳密な比較を適用します。いずれかのオペランドが数値またはブール値の場合、オペランドは可能であれば数値に変換されます。それ以外の場合、どちらかのオペランドが文字列である場合、他のオペランドは可能であれば文字列に変換されます。
これを念頭に置いて、次のように_"true" == true
_を評価します。
isNaN(Number("true")) // true
)String(true) === "true" // true
)文字列_"true"
_および_"true"
_になりました。これらはtrue
に評価されるはずですが、JavaScriptはfalseを示します。
私は何を見逃しましたか?
なぜなら"true"
はNaN
に変換され、true
は1
。だから彼らは異なります。
あなたが報告したように、両方とも少なくともtrue
になる可能性があるため(Erik Reppenのコメントを参照)、数値に変換されてから比較されます。
したがって、「true」== trueは、jsエンジンによって次のように解釈されます。
===> false
抽象的平等比較アルゴリズムによる
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.
oprendsの1つがブール値で、もう1つがブール値でない場合、ブール値は0または1の数値に変換されます。したがってtrue == "true"
はfalseです。