如果我输入019 > 020
JavaScript控制台(在Chrome和Firefox中都经过测试),则会得到答案true
。
这是由于020
被解释为OctalIntegerLiteral
(等于16
),而019
显然是被解释为DecimalLiteral
(等于19
)。如19
大于16
,019 > 020
则为true
。
让我感到困惑的是为什么019
将其解释为DecimalLiteral
第一位。这是什么产品?DecimalIntegerLiteral
不允许019
:
DecimalIntegerLiteral ::
0
NonZeroDigit DecimalDigits_opt
OctalIntegerLiteral
也不允许019
(因为9
不是八进制数字):
OctalIntegerLiteral ::
0 OctalDigit
OctalIntegerLiteral OctalDigit
OctalDigit :: one of
0 1 2 3 4 5 6 7
因此,从我在规范中看到的内容来看,019
实际上应该拒绝它,我不明白为什么将其解释为十进制整数。
我猜这里有某种兼容规则,但是我没有找到正式的定义。可以请任何人帮助我吗?
(为什么需要这样做:我正在使用JavaCC开发Java的JavaScript / ECMAScript解析器,因此必须特别注意其规范-及其偏差。)
019 + 0 == 19
并020 + 0 == 17
因此它忽略前导零,如果它包含非八进制数字。