答案:[1, NaN, NaN]
parseInt函数:
parseInt(string, radix) 将一个字符串 string 转换为 radix 进制的整数, radix
为介于2-36之间的数。返回值是从给定的字符串中解析出的一个整数。或者 NaN。
更多可以看权威解释《MDN-parseInt》
map函数:
map()
方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。它由具有遍历属性的Iterator的数据去调用,然后接受一个回调函数作为参数,回调函数有三个参数
currentValue--- callback
数组中正在处理的当前元素。
index
可选---
callback
数组中正在处理的当前元素的索引。
array
可选---
map
方法调用的数组。
thisArg可选---
执行 callback
函数时值被用作this
更多可以看权威解释《MDN-Array.prototype.map》
['1','2','3'].map(parseInt)
//变形后
['1','2','3'].map((item,index)=>{
return parseInt(item,index)
})
可以看到函数的第二个参数是map的索引值,也就是说
parseInt('1',0) // radix为0 所以被当做10进制或者8进制,两者的返回结果都是1 ---->1
/*
如果 radix 是 undefined、0或未指定的,JavaScript会假定以下情况:
1.如果输入的 string以 "0x"或 "0x"(一个0,后面是小写或大写的X)开头,那么radix被假定为16,字符串的其余部分被解析为十六进制数。
2.如果输入的 string以 "0"(0)开头, radix被假定为8(八进制)或10(十进制)。具体选择哪一个radix取决于实现。ECMAScript 5 澄清了应该使用 10 (十进制),但不是所有的浏览器都支持。因此,在使用 parseInt 时,一定要指定一个 radix。
3.如果输入的 string 以任何其他值开头, radix 是 10 (十进制)。
如果第一个字符不能转换为数字,parseInt会返回 NaN。
*/
parseInt('2',1) // radix 不是介于2-36之间的数,也不是0和undefined ,所以输出NaN
parseInt('3',2) // radix=2 但是被处理的数是3 大于2 所以不合法,也输出NaN
所以最终的得到的结果是 1,NaN,NaN
至此类似的问题都可以用这种方式解决,如果想【字符串数组】<=>【数字数组】之间的转换可以这样
['1','2','3'].map(Number) // [1,2,3]
[1,2,3].map(String) // ['1','2','3']