为什么JavaScript的map和parseInt函数每隔一次调用都会返回NaN?

时间:2019-02-08 16:42:20

标签: javascript

运行时

["6", "1", "0", "3", "3"].map(parseInt)

在浏览器的JavaScript控制台中,我得到输出

[6, NaN, 0, NaN, 3]

!但我期待着

[6, 1, 0, 3, 3]

似乎 可能与parseInt 可以接受两个参数而不是一个参数有关。我的印象是map仅在数组的每个元素上分别调用了给定的函数。有人可以阐明地图的工作原理以及为什么会导致这种奇怪的行为吗?

2 个答案:

答案 0 :(得分:2)

根据documentationparseInt接受两个参数:字符串整数和基数。同时,map传递两个参数:值和索引。

因此,基本上您的通话等效于此:

["6", "1", "0", "3", "3"].map((value, index) => parseInt(value, index))

在无法使用给定参数进行解析时会生成NaN

特别是:

  • parseInt("6", 0)之所以有效,是因为它似乎使用默认的基数(10)
  • parseInt("1", 1)失败,因为1无效的基数
  • parseInt("0", 2)正在工作,它是十进制0的二进制表示形式
  • parseInt("3", 3)失败,因为基数3中不能有“ 3”
  • parseInt("3", 4)正常工作,它是十进制3的4基表示法

答案 1 :(得分:1)

原因是因为parseInt为parseInt(string, radix);

运行map时,它返回参数(value, index, array)

因此它正以

的形式运行
parseInt("6", 0);
parseInt("1", 1);
parseInt("0", 2);
parseInt("3", 3);
parseInt("3", 4);