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