2017-10-06 23 views
44

私はほんの些細な質問の多くを持っています。未定義==未定義です。しかし、undefined> = undefinedはfalseですか?

なぜundefined == undefinedが返されますかtrueですが、undefined >= undefinedfalseですか?

undefinedは、undefinedと等しい。

しかし、それ以上ではありませんか?

+11

私の推測では、両方の 'undefined'は' NaN'に強制的に変換されています。 – Xufox

+1

'undefined === undefined || undefined> undefined'と 'undefined> = undefined'で、"より大きいか等しい "のORはこのORと同じではありません –

+0

@DeepakKamat'> = 'のシーンで何が起きますか?私はこの質問が – theonlygusti

答えて

2

暗黙的に数値に変換できない値を比較するために、不等号演算子(<>など)を使用することはできません。これにはundefinedが含まれます。あなたが見ている理由は、これと同じようなことをしようとするとエラーが発生する他の言語とは異なり(すなわち、TypeError、Pythonで)、JSはこれを行うことができます。ただし、結果は常にfalseになります。

+0

これは '" foo "> =" bar "'が 'true'である理由を説明するものではなく、演算子がオペランドを一致する型に強制する方法についての説明を含んでいません。 – Xufox

+1

@Xufox JavaScriptは曖昧な型の言語であるためです。これは、文字列の数値を持つ文字列を変換して比較することができます。単純な文字列を整数と浮動小数点に変換するのではなく、厳密な比較を行う "==="演算子もあります。 –

+8

実際に、不等式を使用する場合、文字列は[辞書的に]比較されます(https://stackoverflow.com/a/7087831/7662085)。 – stybl

46

>= operatorは、本質的に< operatorの否定です。そして、両方とも、手順3(a〜c)で定義されているように、undefined >= undefinedとして返すAbstract Relational Comparison Algorithmを呼び出します。実際には、より大きい(または等しい)およびより小さい(または等しい)演算子は、数字または文字列でのみ動作することが意味されていることもわかります

それはを返す理由を次に>=オペレータの仕様の6ステップで、あなたが見ることができます:

rまたは未定義であれば、を返します。それ以外の場合は、を返してください。

8

undefined === undefined || undefined > undefinedundefined >= undefined、OR "より大きいか等しい" には、このOR ||と同じではありません。

>, <, >=などの比較演算子は数字を意味し、undefinedは数字ではありません。undefinedは未定義です。

10 >= "Hello World"の場合、返品価値として何を期待しますか?もちろん、偽ですが、10 >= "10"10 == "10"が真で10 === "10"が偽であるためtrueを返します。 "10"は数値に変換することができるので、実際の数値の場合に返され、数値の文字列ではない結果が返されます。

!==あなたがnullundefinedNaNを比較しようとすると、いくつかの本当に奇妙なと混乱物事が起こる

ある!=とは対照的に、>=には、厳密な等価演算子のバージョンはありません - これは何かがそのJavaScriptを仕様がありですがJavaScriptは非常に緩やかに型付けされた言語であり、タイプは非常に柔軟であるため、10"10"を比較でき、他のほとんどの言語で2つの整数を比較したときに得られる結果を得ることができます。

質問とディスカッションは直接投票よりも歓迎です。ありがとう。