面试题一、[‘1‘,‘2‘,‘3‘].map(parseInt) 输出结果是什么?

出去面试的时候当问到这个问题你的第一想法是什么?

  1. 这太简单了,手到擒来。
  2. 面试官太水了
  3. 卧槽,平时没注意,这有点蒙
  4. 不对劲,肯定不会这么简单,那么他挖的坑在哪儿呢?

不管你的内心在yy啥,下面就直奔今天的主体,在控制台看看到底输出了什么。

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

// [1, NaN, NaN]

是不是有些意外?

对于一些同学来说结果是[1,2,3],没想到输出的结果是 [1, NaN, NaN]

那么为什么呢,到底哪儿出了问题呢?

主要的问题还是在parseInt出了问题,那么现在就深入的了解一下。

首先map是将一个回调作为参数进行传递的,而这个回调有三个参数,分别是item, index, arry
如下:

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

/*
	输出如下结果:
	VM2513:3 item, index, arry =>  1 0 (3) ['1', '2', '3']
	VM2513:3 item, index, arry =>  2 1 (3) ['1', '2', '3']
	VM2513:3 item, index, arry =>  3 2 (3) ['1', '2', '3']

*/

而此时传入一个parseInt作为一个参数进行回调,那么需要知道parseInt也是有接收参数的,分别是string, radix, 如下:

parseInt(string, radix)

/* 
string 是必须参数
radix 参数是作为一个非必须基数存在的。代表的是以多少进制(2-36)而进行转换的。
*/

说明:以下解释是从w3c里面获取的。

如果字符串以 “0x” 开头,则基数为 16(十六进制)
如果字符串以 “0” 开头,则基数为 8(八进制)。此特性已弃用
如果字符串以任何其他值开头,则基数为 10(十进制)
注意:只返回字符串中的第一个数字!
注释:允许前导和尾随空格。
注释:如果第一个字符不能转换为数字,parseInt() 返回 NaN。
注释:旧浏览器将导致 parseInt(“010”) 为 8,因为旧版本的 ECMAScript(比 ECMAScript 5 旧)当字符串以 “0” 开头时使用八进制基数 (8) 作为默认值。从 ECMAScript 5 开始,默认值为十进制基数 (10)。

所以map 与 parseInt 的结合就是如下所示:

const arry = ['1', '2','3'];

function aa (item, index, arry) {
    return parseInt(item, index);
}

arry.map((item, index, arry) => parseInt(item, index));
// (3) [1, NaN, NaN]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值