parseInt作为参数传递给地图调用时行为不端

时间:2013-05-18 09:18:14

标签: javascript

为什么会这样?

var numbers = [ '1', '2', '3', '4' ];
var intNumbers = numbers.map( parseInt ); // intNumbers = [1, NaN, NaN, NaN]
var fltNumbers = numbers.map( parseFloat ); // fltNumbers = [1, 2, 3, 4, 5 ]

Array.prototype.map.call( numbers, parseInt );会返回[ 1, 2, 3, 4];。我在Google Chrome 26.0.1410.65中运行此代码。

2 个答案:

答案 0 :(得分:4)

评论中给出了正确答案的链接,但我想在此处发布 :

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

虽然人们可以期待[1, 2, 3]

     

实际结果为[1, NaN, NaN]

     

parseInt通常与一个参数一起使用,但需要两个参数。第二   作为基数对于回调函数,Array.prototype.map传递3   arguments:元素,索引,数组

第三个参数被parseInt忽略,但不是第二个参数,因此可能会产生混淆。

快速修复

function returnInt(element){
   return parseInt(element,10);
}


["1", "2", "3"].map(returnInt);

实际结果是一组数字(如预期的那样)

答案 1 :(得分:0)

https://developer.mozilla.org/en-GB/docs/JavaScript/Reference/Global_Objects/Array/map解释了地图的工作原理。

我发现jonah提出的解决方案更容易,为你要映射的东西创建一个返回函数而不是抛出它..

intN = numbers.map(function(i) { return parseInt(i) });

真正的原因是你正在尝试提供一个函数来映射,但是JS没有正确地使用它。

您最好先声明该功能,然后再将其输入。

var titi = function(i) { return parseInt(i); };

var intN2 = numbers.map(titi);