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