2017-02-23 21 views
0

どうして0 < undefinedが返されますfalseの代わりに未定義ですか?なぜ0 <undefinedは未定義ではなくfalseを返しますか?

ES6仕様の抽象的な関係比較部分に基づいて、http://www.ecma-international.org/ecma-262/6.0/#sec-abstract-relational-comparisonは未定義に戻すべきだと思います。 (私が言っていることを理解するために仕様をクリックしてください)

私はReturnIfAbruptの部分を完全に理解していませんが、比較を止めるべきではないようです。それから私は3と4を​​基本的にはというフラグを使用していて、>フラグではないので使用し続けていると解釈しました。 0とundefinedは両方とも文字列ではないので、5を無視する必要があります。

それでは6にそれが0である番号に0を変換すると、6FがnyがNaNの場合、undefinedを返す」と述べているのでhttp://www.ecma-international.org/ecma-262/6.0/#sec-tonumber

あたりとしてはNaNであるべき数に未定義変換すると言います"なぜ私は未定義ではなく虚偽になっていますか? Chrome、Safari、Firefoxで同じ結果になるので、私は3つのブラウザすべてが仕様を間違って解釈していないと仮定しています。

+0

FWIW '0 NaN === false'。私の推測は '<' and '>'演算子は 'true'または' false'のブール結果を返し、 'undefined'は値ではなく(変数です)ブール値の集合でもありません – slebetman

+0

BTW、最新の仕様はed 7である[* ECMAScript 2016 *](http://www.ecma-international.org/ecma-262/7.0/index.html)です。今年半ば、ECMAScript ed 8 aka 2017リリースされます。 – RobG

答えて

2

答えは抽象的な関係比較操作の仕様であり、<演算子の仕様ではありません。

<オペレータの指定がES6に関係演算子該当:スペックを言い換えhttp://www.ecma-international.org/ecma-262/6.0/#sec-relational-operators-runtime-semantics-evaluation

次のように、<オペレータが動作:

  • が返された場合抽象リレーショナル比較
  • を実行定義されていない場合はfalseを返し、そうでない場合はそれを返します。

だからfalse


ノートに要約リレーショナル比較演算からundefinedの戻り値を変換スペックのハードコードさ部分がある:ES7で同じように指定しています:http://www.ecma-international.org/ecma-262/7.0/#sec-relational-operators-runtime-semantics-evaluationはそれを変更するつもりはありません。また、ES5でもそのように指定されました。

+0

これは、[* ECMAScript ed 1§11.8.1*](http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,% 201st%20edition、%20June%201997.pdf)。 ;-) – RobG

関連する問題