2017-02-23 104 views
0

爲什麼0 < undefined返回false而不是未定義?爲什麼0 <undefined返回false而不是undefined?

基礎上ES6規範http://www.ecma-international.org/ecma-262/6.0/#sec-abstract-relational-comparison的抽象關係比較部分,我認爲它應該返回undefined。 (請點擊規格明白我在說什麼)

我並不完全瞭解ReturnIfAbrupt一部分,但它似乎並不像應該停止比較。然後我把3和4解釋爲基本上說,因爲它使用了一個<標誌,而不是一個>標誌,然後繼續下去。它應該忽略5,因爲0和undefined都不是字符串。

所以後來就6.它說,0轉換爲數字,即0和未定義轉換爲數字應爲NaN按照http://www.ecma-international.org/ecma-262/6.0/#sec-tonumber

自從1207美國「紐約如果是NaN,返回undefined 「那麼我爲什麼會得到錯誤而不是不確定?在Chrome,Safari和Firefox中的結果是相同的,所以我假設所有3個瀏覽器都不解釋規範錯誤。

+0

FWIW'0 的NaN === FALSE'。我的猜測是''<' and '>運算符返回布爾結果要麼是TRUE;或'FALSE'和'undefined'不僅不是一個值(它是一個變量),但也不能在一組布爾 – slebetman

+0

的BTW,最新的規範是[* ECMAScript 2016 *](http://www.ecma-international.org/ecma-262/7.0/index.html),它是ed 7.在今年年中ECMAScript ed 8 aka 2017將會被釋放。 – RobG

回答

2

答案是,你正在尋找的抽象關係比較操作的規範,但不是<操作。

<運營商的規範落在下關係運算ES6:http://www.ecma-international.org/ecma-262/6.0/#sec-relational-operators-runtime-semantics-evaluation

複述此規範,<運營商的工作原理如下:

  • 如果返回執行摘要關係比較
  • 未定義則返回false,否則返回無論它返回

因此,有規範的硬編碼部分從抽象關係比較操作undefined返回值轉換爲false


注:它規定在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,%第201%20edition,%20June%201997.pdf)。 ;-) – RobG