面试:[“1”, “2”, “3”].map(parseInt) 答案是多少?

@[TOC](面试:[“1”, “2”, “3”].map(parseInt) 答案是多少?)

['1', '2', '3'].map(parseInt)是一个经典的 JavaScript 面试题,它的结果可能与你预期的不同。让我们逐步分析它的执行过程。

1.map 方法的工作原理

map是数组的一个方法,它会遍历数组中的每个元素,并对每个元素调用提供的回调函数,最后将回调函数的返回值组成一个新数组返回。

array.map(callback(currentValue, index, array));
  • currentValue:当前处理的元素。
  • index:当前元素的索引。
  • array:原数组。

2.parseInt函数的工作原理

parseInt 是一个将字符串转换为整数的函数。它接受两个参数:

  • string:要解析的字符串。
  • radix:进制基数(2 到 36 之间的整数)。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN;当没有指定基数(radix)时,它会根据字符串的开头来决定解析的进制。如果字符串以“0x”开头,则解析为十六进制;如果以“0”开头但不是“0x”,则解析为八进制;如果以其他数字开头,则解析为十进制。如果字符串中包含非数字字符,parseInt会停止解析并返回之前的值。
parseInt(string, radix);

3.map 和 parseInt 的结合

当 map 调用 parseInt 时,map 会将以下参数传递给 parseInt:

  • 当前元素(currentValue)。
  • 当前索引(index)。

因此,['1', '2', '3'].map(parseInt)的实际执行过程如下:

parseInt('1', 0); // 1
parseInt('2', 1); // NaN
parseInt('3', 2); // NaN
  • 第一次调用:parseInt(‘1’, 0)
    radix 为 0,默认按十进制解析,结果为 1。
  • 第二次调用:parseInt(‘2’, 1)
    radix 为 1,不在 2 到 36 之间,无法解析,结果为 NaN。
  • 第三次调用:parseInt(‘3’, 2)
    radix 为 2,表示二进制,但 3 不是有效的二进制数字,结果为 NaN。

可能有人对第三次调用有点疑惑。下面来看一个例子:

  console.log(parseInt("13", 8)); //11
      console.log(parseInt("28", 8)); //2,8识别不出来,只能截取到1
      console.log(parseInt("17", 7)); //1,7识别不出来,只能截取到1
      console.log(parseInt("16", 7)); //13
      console.log(parseInt("2", 2)); //NaN,2不是有效的二进制数,识别不出来
      console.log(parseInt("11", 2)); //3
      console.log(parseInt("3", 2)); //NaN,3不是有效的二进制数,识别不出来

4.结果

在这里插入图片描述

5. 如何避免这个问题?

如果希望将数组中的字符串转换为数字,可以使用 Number 函数或箭头函数来明确指定参数:
方法 1:使用 Number

['1', '2', '3'].map(Number); // [1, 2, 3]

方法 2:使用箭头函数

['1', '2', '3'].map((str) => parseInt(str, 10)); // [1, 2, 3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

太阳与星辰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值