为什么0< undefined返回false而不是undefined?

时间:2017-02-23 03:53:40

标签: javascript comparison-operators

为什么0 < undefined会返回false而不是未定义?

基于ES6规范http://www.ecma-international.org/ecma-262/6.0/#sec-abstract-relational-comparison的抽象关系比较部分,我认为它应该返回undefined。 (请点击规格了解我在说什么)

我不完全理解ReturnIfAbrupt部分,但似乎不应该停止比较。然后我解释了3和4基本上说,因为它使用&lt;标志而不是&gt;国旗然后继续前进。它应该忽略5因为0和undefined都不是字符串。

然后在6.它说要将0转换为数字,这是0并将未定义转换为根据http://www.ecma-international.org/ecma-262/6.0/#sec-tonumber应该为NaN的数字

由于6f声明“如果ny是NaN,则返回undefined”那么为什么我会变错而不是未定义?这与Chrome,Safari和Firefox的结果相同,所以我假设所有3个浏览器都没有解释规格错误。

1 个答案:

答案 0 :(得分:3)

答案是您正在查看抽象关系比较操作的规范,而不是<运算符。

<运算符的规范属于ES6中的关系运算符:http://www.ecma-international.org/ecma-262/6.0/#sec-relational-operators-runtime-semantics-evaluation

释放规范,<运算符的工作方式如下:

  • 执行抽象关系比较
  • 如果它返回undefined,则返回false,否则返回它返回的任何内容

因此,规范的硬编码部分将undefined返回值从抽象关系比较操作转换为false

注意:它在ES7中的指定方式相同:http://www.ecma-international.org/ecma-262/7.0/#sec-relational-operators-runtime-semantics-evaluation所以它不会改变。此外,它也是在ES5中指定的方式。