奇怪的八进制行为

时间:2016-11-21 09:26:24

标签: javascript ecmascript-6 ecmascript-5

据我所知,八进制文字(形式为023)在ECMAScript 5中无效,但受到广泛支持。在ECMAScript 6中,它们以0o23或0O23格式新支持。令我困惑的是数字的行为,这些数字不是有效的八进制数,但前面有零(019)。这些似乎表现为正常的十进制数字。

所以没有严格模式,我可以得到像022 === 018(真)的东西,因为022被解释为八进制,并且大概018被视为十进制,因为它不能是八进制。

在严格模式下,当使用该格式的有效八进制数(例如022)时出现错误,但使用不能作为有效八进制数的零前缀数时(例如018)则不会出现错误。

这对我来说似乎很奇怪,就像JS(严格模式)告诉我,我可以在我的号码前加一个0,只要它是一个无效的八进制。在ES6(或更高版本)中,零前缀数字(可能的八进制或其他)是无效的,还是被视为小数?

1 个答案:

答案 0 :(得分:3)

这是documented feature

  

十进制文字可以以零(0)开头,然后是另一个   十进制数字,但如果前导0之后的所有数字都小于   在图8中,该数字被解释为八进制数。这不会投入   的JavaScript。

如果您想强制将数字视为八进制,则可以使用ES6中引入的新文字形式0o(或0O)。