面试题

// 运行结果是?
[10, 20, 30].map(parseInt)

考察点

parseInt(string, radix) 解析一个字符串,并返回一个整数

参数

描述

string

必需。要被解析的字符串。

radix

可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。

  • 如果 string 以 “0x” 开头,parseInt() 会把 string 的其余部分解析为十六进制的整数。
  • 如果 string 以 0 开头,那么 ECMAScript v3 允许 parseInt() 的一个实现把其后的字符解析为八进制或十六进制的数字。
  • 如果 string 以 1 ~ 9 的数字开头,parseInt() 将把它解析为十进制的整数。
  • radix 小于2或大于36,则返回 NaN
  • 若无第二个参数,或第二个参数为10,则以10为基数
parseInt(“10”); //返回 10
parseInt(“19”,10); //返回 19 (10+9)
  • 若第二个参数以 0x 或 0X 开头,则以16为基数
parseInt("11",2); //返回 3 (1*2+1)
parseInt("17",8); //返回 15 (1*8+7)
parseInt("17",6) = parseInt(‘1’,6) = 1  // 7>6 即已越界,无法解析,最终会在越界的上一位停止解析
parseInt("10",9) //返回 9 (1*9+0)

解析

[10, 20, 30].map(parseInt)

// 等同于

[10, 20, 30].map((num, index) => {
    return parseInt(num, index)
})
  • 10时,index 为 0 ,按10进制转换,得到10 ;
  • 20时,index 为 1 ,但 parseInt 的第2个参数 radix 需为2 ~ 36,否则返回NAN,得到 NaN
  • 30 按二进制,只能由 0 和 1 组成,所以无法转换,得到 NaN

最终答案

[ 10, NaN, NaN ]