最近由于找工作的比较多 经常会遇到有朋友来问前端题目的情况,其中有一道题目特别有名 那么就是经典的 [1,2,3].map(parseInt)
的结果是什么,答案是[1, NaN, NaN]
那么为什么是这个结果呢
首先这里涉及到了两个知识点,一个是Array.prototype.map
另一个是parseInt的参数,按照MDN上map的说明 第一个参数是currentValue, 第二个参数是index, 第三个参数是array也就是map方法被调用的数组,也就是[1,2,3]
,那么这个数组的调用也就如下所示1
2
3parseInt('1', 0)
parseInt('2', 1)
parseInt('3', 2)
到这一步的时候 这道题目就已经解决了一大半,接下来是看parseInt的定义 parseInt的两个参数分别是string, 和radix用来表示进制,但是对于进制的表示情况有如下说明
在基数为 undefined,或者基数为 0 或者没有指定的情况下,JavaScript 作如下处理:
如果字符串 string 以”0x”或者”0X”开头, 则基数是16 (16进制).
如果字符串 string 以”0”开头, 基数是8(八进制)或者10(十进制),那么具体是哪个基数由实现环境决定。ECMAScript 5 规定使用10,但是并不是所有的浏览器都遵循这个规定。因此,永远都要明确给出radix参数的值。
如果字符串 string 以其它任何值开头,则基数是10 (十进制)。
如果第一个字符不能被转换成数字,parseInt返回NaN。
所以这样的话 那么就返回了[1, NaN, NaN]