为什么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个浏览器都没有解释规格错误。
答案 0 :(得分:3)
答案是您正在查看抽象关系比较操作的规范,而不是<
运算符。
<
运算符的规范属于ES6中的关系运算符:http://www.ecma-international.org/ecma-262/6.0/#sec-relational-operators-runtime-semantics-evaluation
释放规范,<
运算符的工作方式如下:
因此,规范的硬编码部分将undefined
返回值从抽象关系比较操作转换为false
注意:它在ES7中的指定方式相同:http://www.ecma-international.org/ecma-262/7.0/#sec-relational-operators-runtime-semantics-evaluation所以它不会改变。此外,它也是在ES5中指定的方式。