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

前言

早上收到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