为什么当与Array.map一起使用时,parseInt会返回NaN?

时间:2018-01-27 19:23:53

标签: javascript arrays ecmascript-6 parseint

如果我使用parseInt映射数组,则会返回意外和错误的结果:



console.log(["1234-04-23", "1234", "04", "23"].map(parseInt))
// => [1234, NaN, 0, 2]




但冗余添加箭头函数包装器按预期工作



console.log(["1234-04-23", "1234", "04", "23"].map(e => parseInt(e)))
// => [1234, 1234, 4, 23]




这两个陈述的行为应该相同,那么为什么第一个陈述会破裂?

1 个答案:

答案 0 :(得分:1)

因为map添加了第二个和第三个参数:索引和数组本身。见:

["1234-04-23", "1234", "04", "23"].map(console.log);
// => 1234-04-23 0 ["1234-04-23", "1234", "04", "23"]
// => 1234 1 ["1234-04-23", "1234", "04", "23"]
// => 04 2 ["1234-04-23", "1234", "04", "23"]
// => 23 3 ["1234-04-23", "1234", "04", "23"]

正如您在the specification中看到的那样,parseInt也接受第二个参数作为基础,因此您实际上是这样做的:

console.log(["1234-04-23", "1234", "04", "23"].map((e, e2) => parseInt(e, e2)));
// => [1234, NaN, 0, 2]

NaN是因为:

  

parseInt在第一个无效字符处停止并返回它   在那一点上。如果没有要解析的有效字符,则为   返回NaN

来源:https://stackoverflow.com/a/39147168/1525495