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

380 阅读1分钟

关于map和parseInt的函数解释developer.mozilla.org/zh-CN/docs/…

首先parseInt(string, radix) 接收两个参数,第一个表示被处理的值(字符串),第二个表示为解析时的基数,即进制数:

function returnInt(element) {
  return parseInt(element, 10);
}

parseInt(10,0)  //10  radix为0时按十进制处理
parseInt(10,1) //NaN  最小是二进制
parseInt(10,2) //2  即2的0次方*0加2的1次方
parseInt(10,3) //3  即3的0次方*0加3的1次方

所以第一个参数小于10的时候不能大于第二个参数,数学里的进制原理

parseInt(3,2)  //NaN  3的二进制是10
parseInt(9,8)  //NaN  9的八进制是10

之后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 值。
eg:
[1,2,3].map(function(a,b,c){console.log(a,b,c)})

1 0 [1, 2, 3]
2 1 [1, 2, 3]
3 2 [1, 2, 3]

所以题目返回的数组分别是

parseInt(1,0) //十进制  1
parseInt(2,1) //1不符合参数要求
parseInt(3,2) //二进制3是10
所以实际的结果是 [1, NaN, NaN]