为什么 Javascript 在 Infinity/NaN 比较中不遵循 ECMA 规范?
Why does Javascript not follow ECMA specs on Infinity/NaN comparisons?
我已经在 Chrome、Firefox、Safari 中测试过。他们在这些比较中都给出了相同的结果。
0 < NaN
returns false
.
Infinity < Infinity
returns false
.
-Infinity < -Infinity
returns false
.
而根据Abstract Relational Comparison algorithm,在4h和4i步骤中,上述表达式应该return undefined
, true
, true
.
我在这里错过了什么?
lval < rval
,计算时,does:
- Let r be the result of performing Abstract Relational Comparison lval < rval.
- ReturnIfAbrupt(r).
- If r is undefined, return false. Otherwise, return r.
虽然“抽象关系比较”(ARC)可能returnundefined
,但<
运算符求值的最终结果总是true
或false
.
数字与其他数字的实际比较见6.1.6.1.12 Number::lessThan ( x, y );看看 ARC 是怎么说的:
f. If Type(nx) is the same as Type(ny), return Type(nx)::lessThan(nx, ny).
因此,ARC 中步骤 F 之后的内容与您正在检查的这些表达式无关,因为在每个表达式中,您都在将一个数字与另一个数字进行比较。
0 < NaN
完成 lessThan
的第 2 步:
If y is NaN, return undefined.
导致 ARC returning undefined
,导致最终值 false
:如果 r 未定义,return 为假。.
Infinity < Infinity
首先完成第6步,即:
If x is +∞, return false.
-Infinity < -Infinity
首先完成第8步,即:
If y is -∞, return false.
我已经在 Chrome、Firefox、Safari 中测试过。他们在这些比较中都给出了相同的结果。
0 < NaN
returnsfalse
.Infinity < Infinity
returnsfalse
.-Infinity < -Infinity
returnsfalse
.
而根据Abstract Relational Comparison algorithm,在4h和4i步骤中,上述表达式应该return undefined
, true
, true
.
我在这里错过了什么?
lval < rval
,计算时,does:
- Let r be the result of performing Abstract Relational Comparison lval < rval.
- ReturnIfAbrupt(r).
- If r is undefined, return false. Otherwise, return r.
虽然“抽象关系比较”(ARC)可能returnundefined
,但<
运算符求值的最终结果总是true
或false
.
数字与其他数字的实际比较见6.1.6.1.12 Number::lessThan ( x, y );看看 ARC 是怎么说的:
f. If Type(nx) is the same as Type(ny), return
Type(nx)::lessThan(nx, ny).
因此,ARC 中步骤 F 之后的内容与您正在检查的这些表达式无关,因为在每个表达式中,您都在将一个数字与另一个数字进行比较。
0 < NaN
完成 lessThan
的第 2 步:
If y is NaN, return undefined.
导致 ARC returning undefined
,导致最终值 false
:如果 r 未定义,return 为假。.
Infinity < Infinity
首先完成第6步,即:
If x is +∞, return false.
-Infinity < -Infinity
首先完成第8步,即:
If y is -∞, return false.