首页 新闻 赞助 找找看

为啥使用parseInt方法将字符串数组转换为数字数组出现NaN?

0
悬赏园豆:5 [已解决问题] 解决于 2023-01-30 10:49

请尝试运行以下JavaScript代码:

console.log(["1", "2", "3", "4", "5"].map(parseInt));

我的运行结果是[1, NaN, NaN, NaN, NaN]。只有数组的第一个元素被成功转换为数字,其余元素全被全都被转换为NaN。

当我把map方法里的参数由“parseInt”替换为“num => parseInt(num)”、“parseFloat”或“Number”,结果就正常了,是[1, 2, 3, 4, 5]。

为啥我的第一种用法会出现错误?

Halloworlds的主页 Halloworlds | 初学一级 | 园豆:190
提问于:2023-01-29 21:15
< >
分享
最佳答案
2

这个问题我3~4年前也看到过,https://www.cnblogs.com/talentzemin/p/11022181.html

 

1. map和parseInt的签名如下:

array.map(function(currentValue,index,arr), thisValue)

parseInt(string, radix);
 
2. 当你这么写:["1", "2", "3", "4", "5"].map(parseInt)
 
map的每一步是这样的:
parseInt(“1”, 0);
parseInt(“2”, 1);
parseInt(“3”, 2);
parseInt(“4”, 3);
parseInt(“5”, 4);
 
可以看到,数组元素的“索引”,被parseInt当做“进制”去处理了
 
parseInt(“1”, 0); //0和默认值10一样
parseInt(“2”, 1); //将“2”转为1进制,NAN
parseInt(“3”, 2); //将“3”转为2进制,NAN
parseInt(“4”, 3); //将“4”转为3进制,NAN
parseInt(“5”, 4); //将“5”转为4进制,NAN
 
 
收获园豆:5
talentzemin | 小虾三级 |园豆:757 | 2023-01-30 09:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册