以前学js的时候没写博客都感觉白学了orz,借liao雪峰官网和牛客前端练习再捡一遍2333,手册MDN
定义:parseInt() 函数解析一个字符串参数,并返回一个指定基数的整数
参数:
string:要被解析的值。如果参数不是一个字符串,则将其转换为字符串。字符串开头的空白符将会被忽略。
radix:一个2到36之间的整数值,用于指定转换中采用的基数。
如果省略该参数或者为0,则数字将以 10 为基础来解析。
如果string以 “0x” 或 “0X” 开头,将以 16 为基数。
如果string以“0” 开头,在ECMA3中被认为是8进制;但是在ECMA5中已经强制规定此情况默认是10进制
如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN
部分源码:
if (radix == 0) { //如果传入radix是0,则以10进行处理
// Radix detection.
radix = 10;
if (*current == '0') {
++current;
if (current == end) return SignedZero(negative);
if (*current == 'x' || *current == 'X') {
radix = 16;
++current;
if (current == end) return JunkStringValue();
} else {
leading_zero = true;
}
}
} else if (radix == 16) { //16进制
if (*current == '0') {
// Allow "0x" prefix.
++current;
if (current == end) return SignedZero(negative);
if (*current == 'x' || *current == 'X') {
++current;
if (current == end) return JunkStringValue();
} else {
leading_zero = true;
}
}
}
if (radix < 2 || radix > 36) return JunkStringValue(); //radix不在2~36之间的处理
示例(官方文档示例很清楚)
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt
个人分析:对于parseInt不同参数做的深入see see
1.第一个参数是字母开头或是只含字母的字符串,会返回NaN(js里代表非数字的特殊属性值),eg:"a123",像"123hhh"这种会自动忽视后面的hhh ,hhh
ps:如果第一个参数是整数,parseInt会先把这个数toString了
2.第一个参数是个非零开头的整数,会正常返回,正常表示的最大值有17位:
3.第一个参数是小数,会返回这个小数的Math.floor()值,类似c/c++里的int强制类型转化,但当这个小数小到0.0000001时,结果会返回1(即使是"0.0000001"也会返回1),0.000001是0
4.第一个参数以0打头,如
parseInt(021)
(注意和parseInt("021")不同),结果为15
因为021.toString()="17",开头是0,以8进制读取为15