奇怪的八进制行为

3
据我所知,在ECMAScript 5中,八进制字面量(形式为023)无效,但得到了广泛支持。在ECMAScript 6中,它们以0o23或0O23的格式新支持。令我困惑的是那些不是有效八进制数字但有前导零的数字(019)的行为。这些似乎表现为普通的十进制数字。
因此,如果没有启用严格模式,我可以得到一些奇怪的结果,如022 === 018(true),因为022被解释为八进制,而据推测,018因为不能表示为八进制而被视为十进制数字。
在严格模式下,当使用该格式中的有效八进制数字(例如022)时,会出现错误,但是在使用一个不能成为有效八进制数字的带前缀零的数字(例如018)时,不会出现错误。
这对我来说非常奇怪,就好像JS(严格模式)在告诉我,只要这是一个无效的八进制数字,我就可以把0放在我的数字前面。在ES6(或更高版本)中,带前缀零的数字(可能是八进制或其他数字)将无效,还是会被视为十进制数字?
1个回答

3
这是一个已记录的特性
十进制字面量可以以零(0)开头,后跟另一个十进制数字,但如果在前导0之后的所有数字都小于8,则该数字将被解释为八进制数。在JavaScript中不会抛出错误。
如果要强制将数字视为八进制,可以使用ES6中引入的新文字形式 0o (或 0O )。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接