如果我输入019 > 020JavaScript控制台(在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因此它忽略前导零,如果它包含非八进制数字。