我觉得我正在做一些无聊的事情。任何人都可以帮助我理解为什么以下不起作用
["1.1", "2.2", "3.3"].map(parseInt);
//=> [1, NaN, NaN]
这虽然有效但
["1.1", "2.2", "3.3"].map(function(num) {
return parseInt(num);
});
//=> [1, 2, 3]
这似乎也有效
["1.1", "2.2", "3.3"].map(Number);
//=> [1.1, 2.2, 3.3]
答案 0 :(得分:6)
Array.prototype.map
将多个参数传递给回调。特别是它传递的第二个参数是正在处理的元素的索引。
parseInt
接受多个参数。特别是它接受的第二个参数是您要转换的数字系统的基础。
处理完第二个元素后,您正在调用parseInt("2.2", 1)
,由于2
不是基数1中的有效数字,因此结果为NaN
。
如果你在parseInt
周围声明一个“包装”回调,那么这些额外的参数会丢失,一切似乎都能正常工作,尽管you should always pass the second argument to parseInt
。