点击右上方红色按钮关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!
听说这是一道面试题,其实我也无法证明是不是真的,不管是不是,竟然遇上了,作为程序的第一反应就是我得把这道题的答案交待清楚。
一、题中所涉及到的方法
有两个方法:
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],也很简单:
都变成10进制输出整数。
閱讀更多 小鄭搞碼事 的文章