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

JavaScript中console.log打印带前导0的数字数组时数值为何变化?

问题根因

JavaScript 存在历史遗留的数字字面量解析规则:非严格模式下,以0开头、后续字符均为0~7范围数字的字面量,会被自动按照八进制(基数为8)解析,而非十进制。

你遇到的数值转换完全符合这个规则,手动计算即可验证:

  • 八进制02000转十进制:2 * 8^3 + 0*8^2 + 0*8^1 + 0*8^0 = 2*512 = 1024,和你单独打印02000得到的结果一致
  • 八进制02200转十进制:2*512 + 2*64 = 1152
  • 八进制02020转十进制:2*512 + 2*8 = 1040
  • 八进制02002转十进制:2*512 + 2 = 1026
    所有转换结果和你控制台输出的数组元素完全匹配。
修复方案
  • 写十进制数字时不要加无意义的前导0,要表示数值2000直接写2000即可
  • 如果业务上需要保留前导0做固定位数展示(比如编号、邮编类场景),不要用数字类型存储这类值,改用字符串类型,例如"02000"
  • 推荐在脚本开头添加'use strict'开启严格模式,严格模式下隐式八进制写法会直接抛出语法错误,能提前在开发阶段发现这类问题
  • 如果确实需要定义八进制数值,使用ES6标准的0o前缀写法,例如八进制数2000写为0o2000,语义明确不会产生歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 16:18:20