【问题标题】:Why `(['1','2','3']).map(parseInt)` can't get correct result?为什么`(['1','2','3']).map(parseInt)`不能得到正确的结果?
【发布时间】:2016-12-04 21:58:46
【问题描述】:
(['1','2','3']).map(n => parseInt(n));

将返回预期结果[1,2,3]

但是:

(['1','2','3']).map(parseInt);

返回[1, NaN, NaN]

哪里错了?

【问题讨论】:

标签: javascript mapping


【解决方案1】:

由于Array#map 回调有3 个参数,第二个参数是index,它导致了这个结果。无论您将function 传递为callback,此参数都会作为该函数的参数传递。

parseInt 的第二个参数是 radix,因此 parseInt('2',1)parseInt('3',2)NaN

执行流程为:

console.log((['1', '2', '3']).map(function(currenValue, index, array) {
  return parseInt(currenValue, index, array);
}));

我会建议你去Number

console.log((['1', '2', '3']).map(Number));

【讨论】:

  • 这里有一些关于parseInt的微妙细节。如果您传递0 的基数,则parseInt 将其视为base-10,因此010 或默认值相同。即使存在以 1 为底的数字(通常称为“计数”),基数 1 也似乎总是返回 NaN - 所以 parseInt 不支持以 1 为底的数字。最后至少在 Chrome parseInt 上不支持高于 36 的基数 - 它总是会返回 NaN
猜你喜欢
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多