论我们不知道的parseInt详解

695 阅读2分钟

最近无意中看了一道面试题,网上找了很多答案都不是很明白,于是找一个老师求助,终于觉得豁然开朗。

面试题:

 let arr = [1, 2, 3, 4];
 arry=arr.map(parseInt
 console.log(arry)
 输出内容是多少

解析:

map基本用法:遍历数组每一项(数组中有多少项,就会触发执行多少次回调函数,每一次把迭代的当前项和当前项的索引传递给回调函数),回调函数中的返回值会把当前迭代的这一项替换掉

这里大家都明白题目传一个parseInt,是想把该方法作为回调函数传给map;

这里最重要的是parseInt 的用法!!!
  1. parseInt基本用法: parseInt([value]): 把VALUE转换为数字,要求VALUE是字符串(不是字符串先默认转换为字符串),从字符串左边开始查找,找到有效数字字符转换为数字(遇到一个非有效的数字字符,则停止查找)

  2. parsInt支持第二个传参(parseFloat不支持),语法:

 parseInt([value],[radix])   :
 首先[VALUE]是这个字符串,他是把个值看做[RADIX]这个进制,然后最后转换为10进制的数字.
 radix 省略或者为0,则radix默认按照10进行处理(特殊:字符串以 0x/oX 开头,radix默认按照16进行处理)
 radix不在2~36之间,最后结果都为NaN
例如:
parseInt('2AF5', 16); //=>把'2AF5'当做16进制,最后转换为10进制
====== A-F对应数字 10-15
//  5*16^0 + 15*16^1 + 10*16^2 + 2*16^3 = 10997
// '72.45',把八进制转换为16进制 -> 58.578125
// 2*8^0 + 7*8^1 + 4*8^-1 + 5*8^-2 =2*1 + 7*8 + 4*(1/8) + 5*(1/(8*8))

// parseInt('231', 3);
// 3进制只能是 0~2  所以查找到3的时候,发现已经不是3进制的范畴了,则不再继续查找
// 把2当做3进制,最后转换为十进制
// 2*3^0 = 2

// parseInt('23461', 5);
// // '234' 看做 5进制,转换为10进制
// 4+3*5+2*5*5 = 69

综上所述:上述题目答案是

   parseInt(1,0) =>1 
// parseInt(2,1) =>NaN
// parseInt(3,2) =>NaN
// parseInt(4,3) =>NaN