1 2 3 |
var arr = ['1', '2', '3']; r = arr.map(parseInt); console.log(r) |
这结果居然是[1, NaN, NaN];求解!
我们来看一下map的接收参数:array.map(function(currentValue,index,arr), thisValue)
,map给我们提供两个接收参数:function(currentValue,index,arr)
,必须;thisValue
,可选。我们在案例里的arr.map(parseInt);
,parseInt
就是对应map的第一个参数function(currentValue,index,arr)
。既然,parseInt
作为map的function,map的function(currentValue,index,arr)
会传递三个参数给parseInt
currentValue
必须。当前元素的值index
可选。当前元素的索引值arr
可选。当前元素属于的数组对象
也就说parseInt
在map里会接收到三个参数。
我们再来看一下parseInt
:parseInt(string, radix)
。parseInt
也有两个接收参数:
string
必需。要被解析的字符串。radix
可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
这样就巧了,map传三个参数给parseInt
,而parseInt
要接收两个参数。于是,参数一一对应下来:map的currentValue
传给parseInt的string
;map的index
传给parseInt的radix
,于是,parseInt执行的是这样的指令:
- pareInter(1,0)
- pareInter(2,1)
- pareInter(3,2)
所以,结果是:1,NaN,NaN