You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JavaScript中03000被解析为1536?代码异常咨询

为什么带前导零的数字03000会被识别为1536?

你遇到的问题核心是带前导零的数字字面量在旧版JavaScript规范里的解析规则:

问题复现代码

// peak element
let arr = [1, 02, 03000, 4, 5, 6, 7, 8, 900, 100];

function peakElement(arr) {
    let maxElement = arr[0];
    for (let index = 0; index < arr.length; index++) {
        if (arr[index] > maxElement) maxElement = arr[index];
    }
    return maxElement;
}

console.log(peakElement(arr)); // 输出1536,而非预期3000

原因解析

  • 在ECMAScript 5及更早的非严格模式下,带前导零的数字会被JavaScript当作八进制数(基数为8)解析。
  • 八进制的03000转换为十进制的计算过程是:3×8³ + 0×8² + 0×8¹ + 0×8⁰ = 3×512 = 1536,这就是你得到该结果的原因。
  • 同理,02作为八进制数转换为十进制还是2,所以不会影响数组里的其他元素比较。
  • 虽然ES6开始在严格模式下禁止了这种八进制写法(会直接报错),但Chrome控制台、VSCode的非严格模式环境仍然兼容旧规则,所以你能复现这个问题。

解决办法

  • 直接写十进制数字,去掉前导零:把03000改成3000即可得到预期结果。
  • 如果是处理字符串形式的带前导零数字,用parseInt('03000', 10)显式指定十进制解析,避免自动转八进制。

内容的提问来源于stack exchange,提问作者Arpit Chugh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:40:46