0%

解惑 ["1", "2", "3"].map(parseInt) 为何返回[1,NaN,NaN]

JavaScript中的parseInt与map函数都是常用的函数,可是 [“1”, “2”, “3”].map(parseInt)为何返回不是[1,2,3]却是[1,NaN,NaN]?

由于parseInt(string, radix) 的参数radix必须介于2~36之间,而且字符串string中的数字不能大于radix才能正确返回数字结果值。
我们通过一下代码测试一下

1
2
var arr = ["1", "2", "3", "4","5",6,7,8,9,10,11,12,13,14,15];
arr.map(parseInt);

返回结果为:[1,NaN,NaN,NaN,NaN,NaN,NaN,NaN,NaN,9,11,13,15,17,19]
因为:
parseInt(‘1’,0) = 1,
parseInt(‘2’,1) = NaN,
parseInt(‘3’,2) = NaN,
……

正是由于map的回调函数的参数index索引值作了parseInt的基数radix,导致出现超范围的radix赋值和不合法的进制解析,才会返回NaN。