1

次のコードを記述しましたが、出力がありません。これがコードです

var a1 = undefined;
var a2 = 5;
if(a1 > a2)
    alert(1);
if(a1 < a2)
    alert(2);
if(a1 >= a2)
    alert(3);
if(a1 <= a2)
    alert(4);

表示されたアラートボックスはありませんでした。これは、ifステートメントがfalseになったことを意味します。理由を教えてもらえますか?

4

3 に答える 3

4

JavaScriptは、ToPrimitive(@RobG)xを使用しての値をキャストしようとします。は未定義なnumberので、これはfalseを任意の値と比較して返します。したがって、常に戻ります。xNaNfalse

于 2012-10-19T10:15:57.260 に答える
1

関係演算子を使用する式が含まれる場合、抽象関係比較アルゴリズムtrueを使用してオペランドを評価し、結果をまたはに変換しfalseます。

比較アルゴリズムでは、ステップ3aはに変換undefinedされNaNます。ステップ3cでは、何かと比較すると未定義NaNが返されると書かれています。

たとえば、Less-than演算子の手順では、の結果がundefinedfalseに変換されます。

したがって、OPのiffalseステートメントの場合、すべてのテストが返されます。これらはすべて、抽象関係比較アルゴリズムを使用するすべての関係演算子であり、オペランドの1つはですundefined

于 2012-10-19T10:18:20.363 に答える
1

@jAndyがコメントで述べたように、キーワードを値/インスタンスと見なすことはできませんundefinedundefined数値タイプではありません。むしろ、それはのプロパティの特別な値undefinedですGlobal Object

if(undefined {operator} {operand value})これが、式がfalseと評価される理由です。しかし、コードif(undefined == undefined)が返すことを考慮してくださいtrue

これがあいまいさを解消することを願っています!

于 2012-10-19T10:28:48.680 に答える