当前位置: 移动技术网 > IT编程>开发语言>JavaScript > ["1", "2", "3"].map(parseInt)`返回的结果是[1,2,3]?

["1", "2", "3"].map(parseInt)`返回的结果是[1,2,3]?

2018年11月02日  | 移动技术网IT编程  | 我要评论

csol2隔离区,鸿润生态园,初级会计学试题

今天刷到一道面试题,["1", "2", "3"].map(parseint)返回的结果是什么呢?可能大家第一个想到的是 [1,2,3],但是,我可以明确的告诉你,这是结果错的!真正的答案是 [1,nan,nan]

由于map()接收的回调函数可以有3个参数:callback(currentvalue, index, array),通常我们仅需要第一个参数,而忽略了传入的后面两个参数。不幸的是,parseint(string, radix)没有忽略第二个参数,导致实际执行的函数分别是:

parseint('1', 0); // 1, 按十进制转换
parseint('2', 1); // nan, 没有一进制
parseint('3', 2); // nan, 按二进制转换不允许出现2

故`["1", "2", "3"].map(parseint)`返回的结果是 [1,nan,nan]


假如你想使用parseint来把["1", "2", "3"]转化为[1,2,3],代码可以像以下这样写

["1", "2", "3"].map(function parseint2(x) {return parseint(x)});

执行结果如下

假如你只是单纯想把["1", "2", "3"]转化为[1,2,3],代码可以像以下这样写

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

执行结果如下

当然,不嫌弃麻烦的geek的你可能会选择从map下手,你可以像我这样写也可以把更好的写在评论区大家探讨探讨

function.prototype.only = function(number) {
var that = this; 
return function() {
return that.apply(this,[].slice.call(arguments,0,number))
}
};
["1", "2", "3"].map(parseint.only(1));

执行结果如下

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网