Array.map + 百分比

Array.map + parseInt

var timeSplit = timeCaption.innerText.trim().split(' ');

将产生 ["10:00", "–", "18:00"]

的数组
var startStr = timeSplit[0].split(':');

将产生 ["10", "00"]

的数组
var res = startStr.map(parseInt);

将产生 [10, NaN]

的数组

然而

var res = startStr.map(function (x) {
   return parseInt(x);
});

工作正常,将产生 "expected" 数组 [10, 0]

我希望每个字符串都传递给 parseInt,其中 returns 是正确的整数值(单独执行此操作也会产生正确的结果,就像工作代码一样)。

我在这里错过了什么?

编辑:我本人投票决定关闭这个问题。很明显的错误。谢谢大家!

parseInt 的第二个参数是基数或基数(如 10、16 等,默认为基数 10)。 .map 将两个参数传递给回调,该索引处的值以及索引。所以你正在调用 parseInt(10, 0) 试图找出基数 0 中的 10.

parseInt 接受 2 个参数:

  1. 待解析的字符串
  2. 基数

.map 使用 3 个参数调用您的函数:

  1. 价值
  2. 指数
  3. 数组

如果你仔细想想,

parseInt("00", 1)

并没有真正意义,它 returns NaNparseInt 接受 2 到 36 之间的基数。

.map() 使用 3 个参数调用函数:数组元素、数组索引和数组。 parseInt 接受 2 个参数:要解析的字符串和解析它的基数。

所以 startStr.map(parseInt) 正在呼叫:

parseInt("10", 0, startStr);
parseInt("00", 1, startStr);

显然 parseInt()radix = 0 视为无基数,因此它默认为基数 10。但是 radix = 1 根本没有任何意义,因此它 returns NaN.