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