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

遍历数字数组时使用parseInt出现异常行为的原因解析

为什么[2,2,2,2,2,2].map(parseInt)返回的不是全2的数组?

核心原因是**map传递给回调的参数和parseInt接收的参数不匹配**:

  • Array.prototype.map会给回调函数传递三个参数:当前元素值、当前元素的索引、原数组。
  • parseInt接收两个参数:要解析的字符串、基数(radix,即进制数,合法范围是2-36),如果基数无效或者要解析的数字在对应进制里不合法,就会返回NaN。

拆解第一个例子的执行过程

调用[2,2,2,2,2,2].map(parseInt)时,每次parseInt的实际调用参数是:

  • 第1次:parseInt(2, 0) → 基数为0时,默认按十进制解析,结果是2
  • 第2次:parseInt(2, 1) → 基数1是无效值(合法基数是2到36),返回NaN
  • 第3次:parseInt(2, 2) → 二进制里只有0和1是有效数字,2不合法,返回NaN
  • 第4次:parseInt(2, 3) → 三进制里2是有效数字,转十进制为2
  • 第5次:parseInt(2, 4) → 四进制里2有效,转十进制为2
  • 第6次:parseInt(2, 5) → 五进制里2有效,转十进制为2

所以最终输出就是[2, NaN, NaN, 2, 2, 2]。

第二个例子为什么正常?

用箭头函数(num) => parseInt(num)时,我们只把当前元素num传给parseInt,第二个参数(基数)没有显式传递,此时parseInt会默认用十进制解析每个数字,所以所有结果都是2,输出全2的数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:40:27