关于js的进制转换,看这一篇就够了。

1,263 阅读2分钟

Javascript没有类似于Java、Python那么完善的进制转换api,所能用的仅有两个api。
但用这两个api也足以完成36以内进制的转换了。

Number.prototype.toString()

Number重写了Object原型上的toString()方法,可以用来将10进制数转为其它进制的数。

console.log((10).toString(9));//10进制转9进制
console.log((171015).toString(16));//10进制转16进制
console.log((33353630).toString(36));//10进制转36进制
console.log((1).toString(37));//报错,最多36进制

image.png

parseInt(str, radix)

用来将字符串转换为10进制的数,其中字符串是2-36进制的数。

console.log(parseInt(124123, 8));
console.log(parseInt(2135142123, 16));
console.log(parseInt(2135142123, 36));
console.log(parseInt(2135142123, 37));
console.log(parseInt(1323412, 1));
console.log(parseInt(1323412, -1));

image.png
radix只能为2-36,为1或者大于36或者负数时,返回NaN。
同时parseInt会读取字符串的前面的数字部分,也就是说:读取到第一个不是数字的字符为止。
若str直接就是数字的话,会先将str转为number类型,再进行转换。

跨越10进制转换

console.log(parseInt(234, 5).toString(36));
console.log(parseInt(234, 26).toString(2));
console.log(parseInt(234, 36).toString(4));

image.png
我们就可以链式调用parseInt和toString来直接进行进制转换了。

一道经典面试题

let a = [1, 2, 3].map(parseInt)

console.log(a);

image.png
map传入的前两个参数是:数组的元素和数组元素的索引,所以就是1,0与2,1与3,2。进制为0,默认就是10进制;没有1进制;2进制不可能有3。
所以最后的结果就是[1, NaN, NaN]了。


记录记录!