JavaScript 中以零开头的数字:破译其中的奥秘
想象一下在 JavaScript 中遇到以下代码:
var num = 040; console.log(num); // 32
很困惑,你可能想知道 40 为何等于 32。答案在于前导零。
在 JavaScript 的早期版本中,数字文字中的前导零表示八进制(以 8 为基数)数字,类似于十六进制的前导 0x。因此,“040”被解释为 4x8^1 0x8^0 = 32。
然而,这种做法被证明是令人困惑的,并在 ECMAScript 3 中被降级为可选扩展。现代 JavaScript 强制执行严格模式,其中前导零为了保持一致性,禁止使用十进制文字。
ECMAScript 6 引入了使用 0o 和 0b 表示八进制和二进制数的新方法分别是前缀。使用前导零 (010) 的旧八进制格式在严格模式下成为语法错误。
因此,上面的代码现在将在严格模式下返回语法错误。如果希望解析以 8 为基数的数字,可以使用推荐的 0o 前缀或使用 parseInt,如下所示:
parseInt('010', 8); // Returns 8
为了确保正确解析十进制数字,请删除前导零或使用 parseInt。
总之,理解 JavaScript 数字文本中前导零的历史意义对于理解其行为和解释代码至关重要正确。
以上是为什么 JavaScript 中 `040` 等于 32?的详细内容。更多信息请关注PHP中文网其他相关文章!