说结果(2)

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

what & why ?

答:[1, NaN, NaN]

Array.prototype.map 的回调实际接收三个参数 (currentValue, index, array),而 parseInt 接收两个参数 (string, radix)。

每次调用实际是:

parseInt('1', 0) // 1   radix 为 0 时按 10 进制解析
parseInt('2', 1) // NaN  radix=1 不是合法进制
parseInt('3', 2) // NaN  二进制里没有 '3'

补充

补充:map(parseInt) 是经典坑题。要么传 parseInt 的包装:['1','2','3'].map((v) => parseInt(v)),要么用 Number:['1','2','3'].map(Number),得到 [1, 2, 3]。

map 的回调函数签名:

var new_array = arr.map(function callback(currentValue, index, array) {
  // 返回新数组的当前元素
}, thisArg);
  • currentValue:当前被处理的元素;
  • index:当前元素的下标;
  • array:调用 map 的原数组。

parseInt(string, radix):

  • string:被解析的值(字符串);
  • radix:解析时使用的基数(2 ~ 36),超出范围会得到 NaN。