JavaScript中number.toString(8)输出长度异常问题求助
问题原因解析
前导0数字字面量的八进制解析规则:在ES5及更早的JavaScript规范里,以
0开头的数字会被当作八进制数解析。你写的var test=0756432173实际被解析为八进制值,转成十进制是206356083,调用toString(8)会把它转回八进制字符串756432173,长度自然是9。无前导0数字的十进制解析:而
var test=1756432173是标准十进制数字,调用toString(8)是把十进制数转成八进制字符串。计算可得十进制1756432173的八进制表示是1406752555,长度为11,这就是实际结果和你预期不符的核心原因。运行环境的影响:你用的VSCode Code Runner如果没有启用ES6严格模式,就会保留ES5的这个旧规则。在ES6严格模式中,前导0的数字字面量会直接报错,就是为了避免这种进制歧义。
额外提醒:手机号这类带前导0的内容,不要用数字类型处理,应该直接用字符串类型操作,这样既不会丢失前导0,也不会触发进制解析的问题。
内容的提问来源于stack exchange,提问作者Soine
相关产品推荐
相关产品推荐

