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

参考

  • MDN parseInt
  • MDN map

map语法

var new_array = arr.map(function callback(currentValue[, index[, array]]) {
   // Return element for new_array 
   }[,thisArg])

callback
生成新数组元素的函数,使用三个参数:
currentValue
callback 数组中正在处理的当前元素。
index可选
callback 数组中正在处理的当前元素的索引。
array可选
callback map 方法被调用的数组。
thisArg可选
执行 callback 函数时使用的this 值。

parseInt 语法

parseInt(string, radix);

string
要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用 ToString 抽象操作)。字符串开头的空白符将会被忽略。
radix
一个介于2和36之间的整数(数学系统的基础),表示上述字符串的基数。比如参数"10"表示使用我们通常使用的十进制数值系统。始终指定此参数可以消除阅读该代码时的困惑并且保证转换结果可预测。当未指定基数时,不同的实现会产生不同的结果,通常将值默认为10。

因此执行步骤为:

1. parseInt('1', 0)  //radix为0时,且string参数不以“0x”和“0”开头时,按照10为基数处理。这个时候返回1
2. parseInt('2', 1)  //基数为1(1进制)表示的数中,最大值小于2,所以无法解析,返回NaN
3. parseInt('3', 2)  //基数为2(2进制)表示的数中,最大值小于3,所以无法解析,返回NaN

//map函数返回的是一个数组,所以最后结果为[1, NaN, NaN]

如果想正确的转化数组中的字符串为整数,可参考如下方法:

let unary = fn => val => fn(val)
let parse = unary(parseInt)
console.log(['1.1', '2', '0.3'].map(parse)) // [1, 2, 0]
// parseFloat只接受一个参数value,可以直接转为浮点数
['1', '2', '3'].map(parseFloat) 

你可能感兴趣的:(js,web前端)