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进制
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));
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));
我们就可以链式调用parseInt和toString来直接进行进制转换了。
一道经典面试题
let a = [1, 2, 3].map(parseInt)
console.log(a);
map传入的前两个参数是:数组的元素和数组元素的索引,所以就是1,0与2,1与3,2。进制为0,默认就是10进制;没有1进制;2进制不可能有3。
所以最后的结果就是[1, NaN, NaN]了。
记录记录!