修改下标题,这个应该属于parseInt带来的坑,而不是map函数的坑(来看看map函数是怎么坑像我这样的小白的,如果我理解有错的地方欢迎大神们指出,接收各种吐槽,我喜欢在被吐槽中成长)

ok,我们首先来看个列子,这个问题是从某群某大神发出来的,当时我不知道是为什么,乍一看我也萌了,后来群友一说瞬间明白了,

//    很简单的一行代码,结果却不是你想象的那样子
[1,1,1,1,1].map(parseInt)

//    [1, NaN, 1, 1, 1]

解释:

  大家都知道数组的map函数是返回一个新的数组,在这个例子里面很显然的想返回的是和数组一样的一个新数组,那么为什么返回的新数组第二个元素是NaN呢?

  要弄清这个问题就要考虑两个问题

  1.map接受接收一个函数作为参数,函数接受两个参数,一个是数组本身的值,另外一个是数组下标,好了,那么我们现在重新真理之后还原例子中的代码

[1,1,1,1,1].map(function (value,index) {
    return parseInt(value,index)
});
//    [1, NaN, 1, 1, 1]

  2.parseInt也是接受两个参数滴,只是第二个参数是可选的,它会根据你传入的值来进行转换,比如说

1 //    看第一个数组元素传入的值是parseInt(1,0),那么注意如果省略第二个参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数
2 parseInt(1,0);
3 
4 //    结果实1
5 
6 //    看第二个parseInt(1,1),问题就是在这里,第二个参数它只接受2~36之间的数值,如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
7 parseInt(1,1);
8 
9 //    NaN

 

posted on 2016-06-15 10:50  创一代  阅读(159)  评论(0)    收藏  举报