这个面试题仅一行代码

640?wx_fmt=png


今天继续来聊一个面试题,平时上班太忙的同学可以活动活动脑子。


这个题目只有一行代码,但是知识点不只一个。


当然我们的目的不在于做题,而在于解题的过程。


通过一步一步的分析,得出合理的答案。


看题目


 
  

1[1,2,3].map(parseInt)


没错,就一行

(如果很清楚了可以到此打住)


相信大家都见过这个题


下面是我的解析,如果有错误恳请留言斧正


解析


1.  Array.prototype.map()

首先要理解下 map 这个函数,他会返回一个新的数组,结果是数组每个元素都会调用下传入 map 的这个函数而得到的返回值


比如:

  1. 1var arr = [1,2,3];
    2arr.map(x => x * 2);


新的数组的元素都会*2 ,结果是[2,4,6]

好了,我们已经了解了 map 的基本能力。


但是我们发现传入 map 的函数 - parseInt,我们并没有显示的传入参数,可能我们平常的写法是这样的


 
  

1[1,2,3].map((item)=>{
2return parseInt(item)
3})


当然这两种写法所得到的结果是不同的。


以下是 mdn 的说明,


640?wx_fmt=png


callback 函数会被自动传入三个参数,(当前数组元素,元素索引 index) 

原数组本身这个可以忽略了,因为 parseInt只处理前两个参数,后面的参数会忽略。


所以到这里我们能推算出具体的执行代码


 
  

1parseInt(1,0);
2parseInt(2,1);
3parseInt(3,2);


2.   parseInt 方法


到这里我们确定了上面代码得结果就可以了。


parseInt的第一个参数我们都知道,也经常用。然而第二个参数我们大多会传10,其他值很少传。


所以这里有两种理解-

a.第二个参数表示第一个参数的格式,是10进制还是2进制的

b.第二个参数表示 parseInt 返回的结果是10进制的,还是2进制的


我不知道有没有人会理解成 b 这个解释,开始学前端的时候我就这么认为的。


这里是官方的说明:

640?wx_fmt=png

也可以理解成,parseInt 返回的是10进制的自然数,第二个参数是表示的是第一个参数的格式,也就是基数。


那么什么样的基数是合理的呢?

基数不合理或者第一个参数不是数字,返回结果是什么呢?


640?wx_fmt=png


第二个参数:基数是 在2-36之间


那么到这里答案应该就差不多出来了


 
  

1parseInt(1,0);

2parseInt(2,1);
3parseInt(3,2);


parseInt(1,0) ; 

结果是1,参数0会当做是 false 处理,所以会默认是10进制.

parseInt(2,1);

结果是 NaN,因为基数1不合理  但是文档并没有说明这对返回值的影响,经测试是 NaN.

parseInt(3,2);

结果是 NaN,基数是合理范围内,但是3不是2进制。转换失败,结果是 NaN。


到这里解析完成。


3.  总结:


虽然只是一行代码,但是关联知识点很多。

  1. 数组map方法 的能力

  2. 数组 map 方法的参数

  3. parseInt 的能力和理解

  4. parseInt基数的理解



文章有表达不正确或有漏洞的地方欢迎留言区指正,如果对你有帮助还请帮忙点个在看




欢迎关注,前端张大胖-公众号

写点接地气的文章

640?wx_fmt=png


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zz_jesse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值