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

首先我们需要知道.map()和parseInt的具体用法和相关参数:

.map():

map定义和方法 
map()方法返回一个新数组,数组中的元素为原始数组元素调用函数处理的后值。 
map()方法按照原始数组元素顺序依次处理元素。 
注意: 
map不会对空数组进行检测 
map不会改变原始数组 
arr.map(function(currentValue,index,arr),thisValue) 
参数说明 
function(currentValue,index,arr) 
必须,函数,数组中的每个元素都会执行这个函数函数参数 
函数参数 
currentValue 必须 当前元素值 
index 可选 当前元素的索引值 
arr 可选 当前元素属于的数组对象。

返回由字符串转换得到的整数。

parseInt:
  parseInt(numString, [radix])

参数
numString
必选项。要转换为数字的字符串。
radix
可选项。在 2 和 36 之间的表示 numString 所保存数字的进制的值。如果没有提供,则前缀为 '0x' 的字符串被当作十六进制,前缀为 '0' 的字符串被当作八进制。所有其它字符串都被当作是十进制的。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
说明
parseInt 方法返回与保存在 numString 中的数字值相等的整数。如果 numString 的前缀不能解释为整数,则返回 NaN(而不是数字)。

parseInt("abc") // 返回 NaN。
parseInt("12abc") // 返回 12。

第一眼看到这个题目的时候,脑海跳出的答案是 [1, 2, 3],但是真正的答案是[1, NaN, NaN]。

  • 首先让我们回顾一下,map函数的第一个参数callback:

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

  这个callback一共可以接收三个参数,其中第一个参数代表当前被处理的元素,而第二个参数代表该元素的索引。

  • 而parseInt则是用来解析字符串的,使字符串成为指定基数的整数。
    parseInt(string, radix)
    接收两个参数,第一个表示被处理的值(字符串),第二个表示为解析时的基数。

  • 了解这两个函数后,我们可以模拟一下运行情况

  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]

综合示例:

['10','10','10','10','10'].map(parseInt);
// [10, NaN, 2, 3, 4]

猜你喜欢

转载自www.cnblogs.com/wangtong111/p/11202842.html