#['1', '2', '3'].map(parseInt) what & why ?

首先我们看这道题目相对来说是挺简单的,我们先来分析一下:

  • 目标值是一个字符串数组
  • 对目标做map操作,方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果
    • callback 函数会有三个参数传入
      • currentValue:数组中正在处理的当前元素
      • index:数组中正在处理的当前元素的索引
      • array:方法调用的原数组(这里就是指字符串数组
    • thisArg(可选):执行 callback 函数时值被用作this
  • map 操作传入的是parseInt函数,方法依据指定基数 [ 参数 radix 的值],把字符串 [ 参数 string 的值] 解析成整数
    • string:要解析的值。 如果此参数不是字符串,则使用 ToString 抽象操作将其转换为字符串。忽略此参数中的前导空格
    • radix:(可选)一个介于 236 之间的整数,代表字符串的基数(数学数字系统中的基)。⚠️这并不是默认为 10。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN

那么分析到这里结果就显而易见了。

["1", "2", "3"].map(parseInt);
// map运行过程
// 第1次遍历
parseInt("1", 0); // 返回 1

// 第2次遍历
parseInt("2", 1); // 返回 NaN

// 第3次遍历
// 根据 `2` 基数去转换,单个位数大于基数,报错返回 NaN
parseInt("3", 2); // 返回 NaN

// 最终得到的结果
// [1, NaN, NaN]
1
2
3
4
5
6
7
8
9
10
11
12
13
14