这道题大家应该经常会碰到,我们打印一下结果
想要彻底弄懂同类型的题,我们必须先弄懂map,parseInt
map
array.map(function(currentValue, index, arr), thisValue)
参数解析:
-
item
:第一个参数,数组中正在处理的当前元素(必选) -
index
:第二个参数,数组中正在处理的当前元素的索引(可选) -
thisArr
:第三个参数,map 方法被调用的数组(可选) -
thisValue
:对象作为该执行回调时使用,传递给函数,用作 "this" 的值(可选)
parseInt
// radix进制的由数字组成的字符串 string 转换为 10 进制的整数
parseInt(string, radix)
参数解析:
-
string
:要被解析的字符串(必选) -
radix
:要解析的数字的基数。该值介于 2 ~ 36 之间(可选)
radix
详解:
- 如果radix值为 0,则数字将以 10 为基础来解析
- 如果radix小于 2 (!==0)或者大于 36,则 parseInt() 将返回 NaN
- 没有设置该参数时,如果string以 “0x” 或 “0X” 开头,将以 16 为基数
- 没有设置该参数时,如果 string 以 0 开头,转换为8进制或十进制
- 没有设置该参数时,如果 string 以 1 ~ 9 开头,将以 10 为基数
- 如果string超出radix的表示范围,则返回NaN
实践
['1', '2', '3'].map(parseInt)
// 等同于
['1', '2', '3'].map((item, index) => {
return parseInt(item ,index)
})
parseInt('1', 0) // 1 ===> radix值为 0,则数字将以 10 为基础来解析
parseInt('2', 1) // NaN ===> radix小于2,返回NaN
parseInt('3', 2) // NaN ===> string超出radix的表示范围,返回NaN
parseInt('10', 9) // 9 ===> 1 * 9 ^ 1 + 0 * 9 ^ 0 = 9
parseInt("17", 8) // 15 ===> 1 * 8 ^ 1 + 7 * 8 ^ 0 = 15
parseInt("1f", 16) // 31 ===> 16 + 15
parseInt(' 12x') // 12 ===> 开头和结尾的空格是允许的
parseInt('s90') // NaN ===> 如果字符串的第一个字符不能被转换为数字,那会返回 NaN
parseInt(' 12abc!6') // 12 ===> 只有字符串中的第一组数字会被返回