【发布时间】:2017-02-23 03:53:40
【问题描述】:
为什么0 < undefined 返回false 而不是未定义?
基于 ES6 规范 http://www.ecma-international.org/ecma-262/6.0/#sec-abstract-relational-comparison 的抽象关系比较部分,我认为它应该返回未定义。 (请点击规范了解我在说什么)
我不完全理解 ReturnIfAbrupt 部分,但似乎不应该停止比较。然后我将 3 和 4 解释为基本上是说,因为它使用 标志然后继续。它应该忽略 5 因为 0 和 undefined 都不是字符串。
然后在 6. 它说将 0 转换为数字,即 0,并将 undefined 转换为应为 NaN 的数字,根据http://www.ecma-international.org/ecma-262/6.0/#sec-tonumber
既然 6f 声明“如果 ny 是 NaN,则返回未定义”,那么为什么我会得到错误而不是未定义? Chrome、Safari 和 Firefox 的结果相同,所以我假设所有 3 种浏览器都没有对规范进行错误的解释。
【问题讨论】:
-
FWIW
0 < NaN === false和0 > NaN === false。我的猜测是<和>运算符返回一个布尔结果,它是true或false和undefined不仅不是一个值(它是一个变量),而且也不在集合中布尔值 -
顺便说一句,最新的规范是ECMAScript 2016,它是 ed 7。今年年中 ECMAScript ed 8 aka 2017 将发布。
标签: javascript comparison-operators