这道题是每次面试都能刷到的一道题目,答案是 //1 NaN NaN
此题涉及的几个知识点有:
1、parseInt(string,radix)
string:要被解析的字符串,如果不是字符串需要转化为字符串
radix:一个介于2-36之间的的整数,表示上述字符串的基数,是一个可选参数,如果没有或者为0则默认是10
返回值:返回一个整数或者NaN
2、map()方法创建一个数组,其结果是该数组中每一个元素都调用该方法返回后的结果
3、进制换算不知道可以自行百度,以下给出一个简单地例子
数字 101 换算为2进制数字
1*(2^0) +0*(2^1) + 1*(2^2) = 5
有了以上知识储备接下来我们先看这样一道题:
['10','10','10','10','10'].map(parseInt)
parseInt('10',0) //10 第二个参数没有或者为0默认为10进制 0*(10^0) +1*(10^1)= 10
parseInt('10',1) //radix参数应介于2-26之间故而返回 NaN
parseInt('10',2) // 0*(2^0) +1*(2^1) = 2
parseInt('10',3) // 0*(3^0) +1*(3^1) = 3
parseInt('10',4) // 0*(4^0) +1*(4^1) = 4
做了这道题后相信上面这道题已经是不在话下了
同理我们将其每一项遍历出来计算
parseInt('1',0) // 10 第二个参数没有或者为0默认为10进制 0*(10^0) = 1
parseInt('2',1) //radix参数应介于2-26之间故而返回 NaN
parseInt('3',2) // 3>2 故而为NaN
这里面又涉及一知识点 2进制的基数一定比2小 其他基数同理,试试感受一下这样一个题加深理解
parseInt('1061',3) 我们可以看到里面有个6>3 这是此时忽略6之后的数,即忽略(大于等于radix的数及其之后的数)
等价于计算parseInt('10',3) = 3
再来看一道这样的题:
parseInt('3061',3) 第一位数字就等于radix故而直接返回 NaN
了解了以上题和规则及其知识点,以后再也不怕这种题了。。。
end.......