面试题
// 运行结果是?
[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 ]