为什么['1', '7', '11'].map(parseInt) returns [1, NaN, 3]?

本文深入探讨了JavaScript中一个令人费解的现象:为何['1','7','11'].map(parseInt)会返回[1,NaN,3]。通过逐步分析map和parseInt函数的工作原理,特别是parseInt的基数参数如何被意外地影响,揭示了这一奇特行为背后的秘密。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

早上收到Medium的邮件推送,看到这样一篇文章:Why ['1', '7', '11'].map(parseInt) returns [1, NaN, 3] in Javascript

看定义

map语法:

array.map(function(currentValue,index,arr), thisValue)

parseInt语法:

parseInt(string, radix);

估计很少有人在意第二个参数

radix
一个介于2和36之间的整数(数学系统的基础),表示上述字符串的基数。比如参数"10"表示使用我们通常使用的十进制数值系统。始终指定此参数可以消除阅读该代码时的困惑并且保证转换结果可预测。当未指定基数时,不同的实现会产生不同的结果,通常将值默认为10。

分解

['1', '7', '11'].map(parseInt) 

step1:

parseInt('1', 0, ['1', '7', '11']);   => 1

step2:

parseInt('7', 1, ['1', '7', '11']);   => NaN

step3:

parseInt('11', 2, ['1', '7', '11']);   => 3

原因

简单来说就是map传了index参数到parseInt的radix,导致parse出现意料之外的错误。

转载于:https://www.cnblogs.com/talentzemin/p/11022181.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值