['1', '2', '3'].map(parseInt)

192 阅读1分钟

前言

这是一道很经典的笔试题目,在之前一头雾水的我在答案上输出[1,2,3]... 然而答案却很离谱,来看看究竟是怎么一回事。

求解过程

在MDN上查找parseInt这个方法

parseInt(stringradix)解析一个字符串并返回指定基数的十进制整数, radix 是2-36之间的整数,表示被解析字符串的基数。

返回值

从给定的字符串中解析出的一个整数。

或者 NaN,当

  • radix 小于 2 或大于 36 ,或
  • 第一个非空格字符不能转换为数字。
['1', '2', '3'].map(parseInt)
//`parseInt('1', 0)`,直接按照10进制解析,结果为1;
//`parseInt('2', 1)`,传入了非`2~36`的值,结果为NaN;
//`parseInt('3', 2)`,按照2进制进行解析,2进制可以解析的数字只有1和0,所以返回`NaN`

因此答案为[1, NaN, NaN]