【问题标题】:Strange octal behavior奇怪的八进制行为
【发布时间】:2017-04-04 15:26:13
【问题描述】:

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

所以没有严格模式,我可以得到 022 === 018 (true) 之类的东西,因为 022 被解释为八进制,而 018 可能被视为十进制,因为它不能是八进制。

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

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

【问题讨论】:

    标签: javascript ecmascript-6 ecmascript-5


    【解决方案1】:

    这是documented feature

    十进制字面量可以以零 (0) 开头,后跟另一个 十进制数字,但如果前导 0 之后的所有数字都小于 8、数字被解释为八进制数。这不会扔 JavaScript。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-07
      • 2013-08-02
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      • 2011-01-21
      相关资源
      最近更新 更多