02-[‘1‘, ‘2‘, ‘3‘].map(parseInt)

答案:[1, NaN, NaN]


parseInt函数:

parseInt(stringradix)   将一个字符串 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']

 

一:['1', '2', '3'].map(parseInt) what & why ?

©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页