为什么JavaScript中数组存储的首个数字元素运行结果不符合预期
问题原因说明
你遇到的这个现象是JavaScript的八进制字面量解析规则导致的:
- 在非严格模式下,当数字字面量以
0开头、且后续所有数字都在0-7范围内时,JS会默认将其识别为八进制(基数为8)的数值 - 你写的
0123正好符合这个规则,换算成十进制的计算逻辑是:1*8² + 2*8¹ + 3*8⁰ = 64 + 16 + 3 = 83,和你实际得到的输出一致。
解决方案
如果你的需求是保留十进制的123,或者要保留前导零的展示效果,可以参考以下两种处理方式:
- 不要给十进制数字加不必要的前导零,直接写
123即可:
const arr = [123, 1456]; console.log(arr); // 输出 [123, 1456]
- 如果你确实需要保留前导零的字符串形式,直接把值定义为字符串类型:
const arr = ['0123', '1456']; console.log(arr); // 输出 ["0123", "1456"]
补充说明:如果在严格模式下,以
0开头的八进制字面量会直接抛出语法错误,也能避免这类隐式转换的问题。
内容的提问来源于stack exchange,提问作者Rayan Reyaz
相关产品推荐
相关产品推荐

