[阿里巴巴最新面试题----JavaScript中map(parseInt)的问题]
问题
利用map()把字符串变成整数
let arr = [10.18,0,10,25,23]; arr = arr.map(parseInt); console.log(arr);
Output:
[10, NAN, 2, 2, 11]
原因
map()有三个参数:value, index, array,后两个为可选参数
- 调用map函数时,三个参数都会传入map内的函数中
- 在这道题中,parseInt有两个参数,字符串和进制
- 所以,map会将value和index传入parseInt函数
实际上最终的效果是:
parseInt("10.18", 0); -> 10 parseInt("0", 1); -> NAN parseInt("10", 2); -> 2 parseInt("25", 3); -> 2 parseInt("23", 4); -> 11
想要正确转换的解决办法
- Number
let arr = [10.18,0,10,25,23]; console.log(arr.map(Number));
- 自定义
let arr = [10.18,0,10,25,23]; console.log(arr.map((value)=>{ return parseInt(value); }))
补充:
有关parseInt的radix,当遇到0、undefined或未被指定时,parseInt有如下行为:
1)被转换的字符串起于"0x"/“0X” --> 十六进制转为十进制;
2)被转换的字符串起于"0" --> 八进制或十进制(由解释器决定)转为十进制;
3)被转换字符串起于其他值 --> 十进制转为十进制