供参考链接:www.jianshu.com/p/8fcfabb09…
面试题引入
面试题1
['1','2','3'].map(parseInt)结果是什么?
结果:[1, NaN, NaN]
面试题2
['1','2','3'].map(parseInt)等价于
let newArray = ['1', '2', '3'].map((item, index) => {
return parseInt(item, index)
})
console.log(newArray) // [1, NaN, NaN]
这道面试题 考的是radix的取值范围。
- radix取值在
2~36之间,在这边可以理解为(3~36)区间,都可以转换number类型。 - 特殊:
radix值是0或者undefined,也可以转换成number类型。 - 不在区间内,都返回
NaN。 - 这边的
radix为2时,都返回NaN。
定义和用法
parseInt()函数可解析一个字符串,并返回一个整数。- 当参数
radix的值为0,或没有设置该参数时,parseInt()会根据string来判断数字的基数。 - 当忽略参数
radix,JavaScript默认数字的基数如下:- 如果
string以 "0x" 开头,parseInt()会把string的其余部分解析为十六进制的整数。 - 如果
string以 0 开头,那么ECMAScript v3允许parseInt()的一个实现把其后的字符解析为八进制或十六进制的数字。 - 如果
string以 1 ~ 9 的数字开头,parseInt()将把它解析为十进制的整数。
- 如果
语法
parseInt(string, radix)
- string:必须。要被解析的字符串
- radix:可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
第一个参数:无论是小数、字符串都可以强制转换成 number类型。
第二个参数:默认值 radix 值为 0
注意点
- 只有字符串中的第一个数字会被返回。
- 开头和结尾的空格是允许的。
- 如果字符串的第一个字符不能被转换为数字,那么 parseInt() 会返回 NaN。
- 在字符串以"0"为开始时旧的浏览器默认使用八进制基数。ECMAScript 5,默认的是十进制的基数。
eg:
parseInt("10") //10
parseInt("10.33") //10
parseInt("34 45 66") //34
parseInt(" 60 ") //60
parseInt("40 years") //40
parseInt("He was 40") //NaN
parseInt("10",10) //10
parseInt("010") //10
parseInt("10",8) //8
parseInt("0x10") //16
parseInt("10",16) //1
parseInt('10', 0) // 10
parseInt('10', null) // 10
parseInt('10', undefined) // 10
parseInt('10', 37) // NaN
parseInt('10', 1) // NaN
parseInt("011",2) //3
parseInt("011",10) //11
parseInt("011",16) //17
// 若*string*不是字符串,则将其转换为字符串再解析
parseInt(11,2) //3
parseInt(011,2) //NaN 011转换成string是9,而9对于二进制是非法字符
parseInt(011) //9
parseInt(1.11,10) //1