解释运行代码「'1', '2', '3'」.map(parseInt)的返回值

点击右上方红色按钮关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!

听说这是一道面试题,其实我也无法证明是不是真的,不管是不是,竟然遇上了,作为程序的第一反应就是我得把这道题的答案交待清楚。

一、题中所涉及到的方法

有两个方法:

1、map

一个挂在数组原型上的方法,由于它能很方便的帮我们遍历数组数据,所以平时用的还是比较多的。

如一个参数的情况,返回函数里传的是正在遍历的函数本身

['1', '2', '3'].map((item)=>{ console.log(item) })

如两个参数的情况,返回函数里传的是正在遍历的函数本身和其索引值

['1', '2', '3'].map((item, index)=>{ console.log(item, index) })

如三个参数的情况,一般不这么搞,但可以这么搞

['1', '2', '3'].map((item, index, arr)=>{ console.log(item, index, arr) })

2、parseInt

大家都知道,它的作用是用来解析一个字符串,并返回一个整数。

可以有两个参数,其中第一个参数是被解析的字符串。第二个参数表示要解析数据的进制数(特别注意:当省略或者为0时当作10进制来处理)。举个例子:

parseInt("16", 10) // 输出:16

parseInt("11", 2) // 输出:3

当然,如果是下面这样,输出就是NaN(因为3不是一个二进制,无法输出整数)

parseInt("3", 2)

二、分析输出结果

回到题目:['1', '2', '3'].map(parseInt)将输出什么?

先来看这段代码输出什么:

['1', '2', '3'].map(function (item,index,arr) {

console.log(item,index,arr)

})

对,很容易理解输出下面三行:

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

['2', 1, ['1', '2', '3']]

['3', 2, ['1', '2', '3']]

每一行三个参数:第一参数是正在遍历的元素,第二个是正在遍历元素的索引,第三个参数是原数组本身。

也就是说,map在调用返回函数的时候,会给它传三个参数(上面说的)。而parseInt只能有两个参数,它会忽略第三个参数。所以如下:

parseInt('1', 0) // 输出 1

parseInt('2', 1) // 输出 NaN (由parseInt定义进制数小于2都是NaN)

parseInt('3', 2) // 输出 NaN(字符串3是非2进制)

最终结果输出[1, NaN, NaN]

如果要想输出[1,2,3],也很简单:

解释运行代码「'1', '2', '3'」.map(parseInt)的返回值

都变成10进制输出整数。


分享到:


相關文章: