["1", "2", "3"].map(parseInt)`返回的结果是[1,2,3]?
程序员文章站
2022-07-06 14:34:21
今天刷到一道面试题,["1", "2", "3"].map(parseInt)返回的结果是什么呢?可能大家第一个想到的是 [1,2,3],但是,我可以明确的告诉你,这是结果错的!真正的答案是 [1,NaN,NaN] 由于map()接收的回调函数可以有3个参数:callback(currentValu ......
今天刷到一道面试题,["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));
执行结果如下
推荐阅读
-
学习9.总结# 1.函数初识 # 2.函数的定义 # 3.函数的调用 # 4.函数的返回值 # 5.函数的参数
-
学习9.内容# 1.函数初识 # 2.函数的定义 # 3.函数的调用 # 4.函数的返回值 # 5.函数的参数
-
js正则表达式之$1$2$3$4$5$6$7$8$9属性,返回子匹配的结果
-
Linux 操作系统的权限为什么是1,2,4 而不是 1,2,3?如何用二进制来做权限管理
-
["1", "2", "3"].map(parseInt)`返回的结果是[1,2,3]?
-
关于如何使`(a === 1 && a === 2 && a === 3)`返回`true`问题的思考
-
剑指offer56:删除链表中重复的结点,排序的链表中,删除重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
-
「前端」[1, 2, 3].map(parseInt) 解析
-
学习9.内容# 1.函数初识 # 2.函数的定义 # 3.函数的调用 # 4.函数的返回值 # 5.函数的参数
-
学习9.总结# 1.函数初识 # 2.函数的定义 # 3.函数的调用 # 4.函数的返回值 # 5.函数的参数