-1 == true; //false
-1 == false //false
-1 ? true : false; //true
誰かが上記の出力を説明できますか?私は0と比較することでこれを回避できることを知っていますが、興味があります。ずさんなequalsステートメントの少なくとも1つが暗黙的な型変換を行うため、trueであると期待しますが、3項がまったく異なる結果をもたらすとは期待していませんでした。
最初の2つのケースでは、ブール値は数値にキャストされます- 1はtrueで、0はfalse 。最後のケースでは、ブールにキャストされるのは数値であり、0とNaNを除くすべての数値はtrueにキャストされます。したがって、テストケースは次のようになります。
-1 == 1; // false
-1 == 0; // false
true ? true : false; // true
同じことが0でも1でもないすべての数値に当てはまります。
詳細については、ECMAScriptのドキュメントをご覧ください。 第3版[PDF] から、セクション11.9.3抽象等値比較アルゴリズム:
19。 Type(y)がブール値の場合、比較の結果x == ToNumber(y)を返します。
他のタイプはさらにひどい問題を引き起こす可能性があるため、完全なアルゴリズムを読み取っておく価値があります。
ほとんどのシステムでは、ゼロ以外の値は真の値と見なされますが、必ずしもsametrue
と同じ値であるとは限りません。したがって、-1 == true
は必ずしも成立するとは限りませんが、-1
はゼロ以外であるため、真の値と見なすことができます。
しかし実際には、整数をブール値と比較するべきではないのであれば、それを比較するべきではありません。