You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么JS中map直接传parseInt与箭头函数包裹后执行结果不等

问题核心原因

两个语句执行结果不一致,是忽略了两个JS基础规则:

  • Array.prototype.map 传入的回调函数默认会接收3个参数:当前遍历元素、当前元素索引、遍历的原数组
  • parseInt 函数可接收两个参数:第一个是要解析的字符串,第二个是解析使用的进制基数radix

代码执行逻辑拆解

首先 [..."123"] 执行后得到数组 ["1", "2", "3"],我们分别看两个map的执行逻辑:

output2的执行逻辑

你写的回调是 e => parseInt(e),手动限制了只把第一个参数(当前元素)传给parseInt,parseInt没有收到第二个radix参数时,默认按10进制解析:

  • 第一次调用:parseInt("1") → 返回1
  • 第二次调用:parseInt("2") → 返回2
  • 第三次调用:parseInt("3") → 返回3
    最终output2结果为 [1, 2, 3]

output1的执行逻辑

直接把parseInt作为回调传给map时,map会把所有3个参数都传递给parseInt,parseInt会忽略不认识的第三个参数,只接收前两个:

  • 第一次调用:遍历索引为0,实际执行 parseInt("1", 0) → radix为0时JS默认按10进制解析,返回1
  • 第二次调用:遍历索引为1,实际执行 parseInt("2", 1) → 不存在1进制,合法数字不存在,返回NaN
  • 第三次调用:遍历索引为2,实际执行 parseInt("3", 2) → 2进制仅支持0、1两个字符,3是非法字符,返回NaN
    最终output1结果为 [1, NaN, NaN]

内容的提问来源于stack exchange,提问作者Ronnis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:45:04