次のコードを記述しましたが、出力がありません。これがコードです
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になったことを意味します。理由を教えてもらえますか?
次のコードを記述しましたが、出力がありません。これがコードです
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になったことを意味します。理由を教えてもらえますか?
JavaScriptは、ToPrimitive(@RobG)x
を使用しての値をキャストしようとします。は未定義なnumber
ので、これはfalseを任意の値と比較して返します。したがって、常に戻ります。x
NaN
false
関係演算子を使用する式が含まれる場合、抽象関係比較アルゴリズムtrue
を使用してオペランドを評価し、結果をまたはに変換しfalse
ます。
比較アルゴリズムでは、ステップ3aはに変換undefined
されNaN
ます。ステップ3cでは、何かと比較すると未定義NaN
が返されると書かれています。
たとえば、Less-than演算子の手順では、の結果がundefined
falseに変換されます。
したがって、OPのiffalse
ステートメントの場合、すべてのテストが返されます。これらはすべて、抽象関係比較アルゴリズムを使用するすべての関係演算子であり、オペランドの1つはですundefined
。
@jAndyがコメントで述べたように、キーワードを値/インスタンスと見なすことはできません。undefined
undefined
数値タイプではありません。むしろ、それはのプロパティの特別な値undefined
ですGlobal Object
if(undefined {operator} {operand value})
これが、式がfalseと評価される理由です。しかし、コードif(undefined == undefined)
が返すことを考慮してくださいtrue
これがあいまいさを解消することを願っています!