javascript - 奇怪的八进制行为

标签 javascript ecmascript-6 ecmascript-5

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

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

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

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

最佳答案

这是一个 documented feature :

Decimal literals can start with a zero (0) followed by another decimal digit, but If all digits after the leading 0 are smaller than 8, the number is interpreted as an octal number. This won't throw in JavaScript.

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

关于javascript - 奇怪的八进制行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40716699/

相关文章:

javascript - 我无法在 node.JS 中使用 ES6 语法

javascript - react 去抖得到 e.target.value undefined

javascript - Typescript 组件中的“this”与 Angular2 中的 ES5

javascript - ECMAScript 2017 : Where Did "13.2 Creating Function Objects" Go (from ES5)?

javascript - 在这样的页面之间移动的正确方法是什么?

javascript - 原型(prototype)继承设置

javascript - 可搜索的下拉列表

javascript - 对没有类或 ID 且位于 Div 中的输入焦点发出警报

javascript - 如何扩展 moment js?

javascript - 空格键的 keydown 事件监听器