[‘1‘,‘2‘,‘3‘].map(parseInt)详解

前端一道面试题 [‘1’,‘2’,‘3’].map(parseInt),结果[1, NaN, NaN],有很多人不理解,下面来解释以下

首先,我们先来了解一下map函数

map 方法 (Array) (JavaScript)
对数组的每个元素调用定义的回调函数并返回包含结果的数组。
array1.map(function(a,b,c){
a 是数组中的每一项即‘1‘’2‘’3‘
b 是数组的下标 即0 1 2
c 是原数组 即 array1
})
如下例子:

var arr = ['1','2','3'];
  function fn(num,a,c){
    
    
    console.log(num,a,c);  
    //num       a           c
    //1         0      ["1", "2", "3"]
    //2         1      ["1", "2", "3"]
    //3         2      ["1", "2", "3"]
    return num;
  }
  // console.log(arr.map(fn));

由上可知map如果里面是一个函数,将会将它的参数传递到函数中去

默认参数:当没有给map指定输入几个参数时,采用全部参数的形式。

['1','2','3'].map(function(){
    
    
    console.log(arguments);   //arguments中包括全部三个参数
})

在这里插入图片描述

parseInt(string, radix)

参数 描述
string 必需。要被解析的字符串。
radix 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。
如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。(来源于MDN)

console.log(['1','2','3'].map(parseInt));  //[1, NaN, NaN]
// 等同于
['1','2','3'].map((item,index)=>{
    
    
    return parseInt(item,index)
})

parseInt(‘1’, 0) -> 1 radix 为 0,parseInt() 会根据十进制来解析,所以结果为 1;
parseInt(‘2’, 1) -> radix 为 1,超出区间范围,所以结果为 NaN;
parseInt(‘3’, 2) -> NaN radix 为 2,用2进制来解析,应以 0 和 1 开头,所以结果为 NaN。

总结:

[‘1’,‘2’,‘3’].map(parseInt) 输出的是一个数组,里面的元素分别是1,NaN,NaN。map的作用是遍历数组中的每个元素,对每个元素都执行map()第一个函数的操作,这里就是都进行数字转换,返回结果是一个新的数组。当没有指定map中function传递几个参数时,默认是能传递多少就传多少,parseInt最多能接收两个参数,所以map就把前两个参数(当前值,索引值)传递给parseInt,依次举例就是parseInt(‘1’,0)返回的是0,parseInt(‘2’,1)返回的是NaN,因为第二个参数必须是2~36之间的数,parseInt(‘3’,2)返回的是NaN,因为二进制不包括3这个数字,因此会得到1,NaN,NaN的结果。

猜你喜欢

转载自blog.csdn.net/qq_51441159/article/details/128091025
今日推荐