最近无意中看了一道面试题,网上找了很多答案都不是很明白,于是找一个老师求助,终于觉得豁然开朗。
面试题:
let arr = [1, 2, 3, 4];
arry=arr.map(parseInt
console.log(arry)
输出内容是多少
解析:
map基本用法:遍历数组每一项(数组中有多少项,就会触发执行多少次回调函数,每一次把迭代的当前项和当前项的索引传递给回调函数),回调函数中的返回值会把当前迭代的这一项替换掉
这里大家都明白题目传一个parseInt,是想把该方法作为回调函数传给map;
这里最重要的是parseInt 的用法!!!
-
parseInt基本用法: parseInt([value]): 把VALUE转换为数字,要求VALUE是字符串(不是字符串先默认转换为字符串),从字符串左边开始查找,找到有效数字字符转换为数字(遇到一个非有效的数字字符,则停止查找)
-
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