JavaScript中带前导零的数字解析规则为何存在差异?
关于JS中前导零数字的解析与数组排序问题
核心原因:JS不同版本对前导零数字的解析规则差异
- ES5及之前的非严格模式:
- 数字以
0开头且后续字符都是0-7时,会被当作八进制数解析; - 以
0开头但包含8或9时,无法构成合法八进制,会 fallback 成十进制数解析。
- 数字以
- ES6及之后:官方废除了前导零表示八进制的写法,改用
0o前缀(比如0o31才对应八进制25),前导零的数字在严格模式下会直接报错。
对应你的例子拆解
- 输入
031:符合八进制规则,计算为3*8 + 1 = 25,所以控制台输出25; - 输入
0945:因为包含数字9,不满足八进制的0-7范围,直接按十进制解析为945; - 数组
var a = [0310, 2329, 2358, 0945]的实际值:0310是合法八进制,计算为3*8² + 1*8 + 0 = 3*64 + 8 = 200;0945按十进制解析为945;
所以数组实际存储的是[200, 2329, 2358, 945],调用默认升序排序后,自然得到[200, 945, 2329, 2358]。
内容的提问来源于stack exchange,提问作者ABGR
相关产品推荐
相关产品推荐

