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

Yaw*_*kye 5 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 ]
Run Code Online (Sandbox Code Playgroud)

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

小智 4

评论中给出了正确答案的链接,但我想将其发布在这里:

["1", "2", "3"].map(parseInt);
Run Code Online (Sandbox Code Playgroud)

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

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

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

parseInt 会忽略第三个参数,但不会忽略第二个参数,因此可能会造成混淆。

快速解决

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


["1", "2", "3"].map(returnInt);
Run Code Online (Sandbox Code Playgroud)

实际结果是一个数字数组(如预期)