在w3School中定义
定义和用法
parseInt() 函数可解析一个字符串,并返回一个整数。
语法
parseInt(string, radix)
参数 | 描述 |
---|---|
string | 必需。要被解析的字符串。 |
radix | 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。 |
解析规则
- string头尾部空格将被自动除去
parseInt(" 011 ",2) //3
- 若string不是字符串,则将其转换为字符串再解析
parseInt(11,2) //3
parseInt(011,2) //NaN 011转换成string是9,而9对于二进制是非法字符
parseInt(011) //9
parseInt(1.11,10) //1
- 如果radix不是数值,会被自动转为一个整数。这个整数只有在2到36之间,才能得到有意义的结果,超出这个范围,则返回NaN。如果第二个参数是0、undefined和null则直接忽略。如:
parseInt('10', 37) // NaN
parseInt('10', 1) // NaN
parseInt('10', 0) // 10
parseInt('10', null) // 10
parseInt('10', undefined) // 10
- 两个参数都存在的情况下,以radix为基数解数数析string。如:
parseInt("011",2) //3
parseInt("011",10) //11
parseInt("011",16) //17
- 如果字符串包含对于指定进制无意义的字符,则返回
NaN
。
parseInt('1546', 2) // 1
parseInt('546', 2) // NaN
- 第二个参数radix省略时,默认为10进制解析,以0x开头时以16进制解析。以0开头时ES5规定按照10进制解析。如:
parseInt("11") //11
parseInt("011") //11,目前chrome、firefox、ie中的结果都是11,若想用8进制解析,请加上第二个参数!
parseInt("0x11") //17
- 当string解析成整数的时候,是一个个字符依次转换,当遇到不能转换成数字的字符时将停止解析,只返回前面解析的结果。如:
parseInt("11ww") //11
parseInt("011ww") //11
parseInt("0x11ww") //17
parseInt("0ww") //0, 解析成parseInt("0",10)
//如果存在参数radix时则按该参数值为基数解析
parseInt("011w",10) //11, 直接按10进制解析
parseInt("0xww",10) //0, 直接按10进制解析,遇到非数字则停止
- 当string的第一个字符不能被转换成数字(后面跟着数字的正负号除外),结果返回NaN
parseInt("ww") //NaN, 解析成parseInt("",10);
parseInt("0xww") //NaN, 解析成parseInt("",16)
parseInt("+11") //11
- 自动转为科学计数法的数字,parseInt会将科学计数法的表示方法视为字符串。如:
parseInt(1000000000000000000000.5) // 1, 等同parseInt('1e+21')
parseInt(0.0000008) // 8, 等同于parseInt('8e-7')
存在问题
parseInt("1111111111111111111111", 10) //1.1111111111111111e+21, 22位
parseInt(1111111111111111111111, 10) //1, 22位
parseInt(111111111111111111111, 10) //111111111111111110000, 21位
parseInt(11111111111111111111, 10) //11111111111111110000,20位
parseInt(1111111111111111111, 10) //1111111111111111200, 19位
parseInt(111111111111111111, 10) //111111111111111100, 18位
parseInt(11111111111111111, 10) //11111111111111112, 17位
parseInt(1111111111111111, 10) //1111111111111111, 16位
解释
JavaScript的数值有多种表示方法,可以用字面形式直接表示,也可以采用科学计数法表示,下面是两个科学计数法的例子。
以下两种情况,JavaScript会自动将数值转为科学计数法表示,其他情况都采用字面形式直接表示。
//1.小数点前的数字多于21位。
1234567890123456789012 // 1.2345678901234568e+21
123456789012345678901 // 123456789012345680000
//2.小数点后的零多于5个。
0.0000003 // 3e-7
0.000003 // 0.000003
/*
*结果如下:
*/
1111111111111111111111 自动转化为 1.1111111111111111e+21
parseInt(1.1111111111111111e+21, 10) -> 1
参考链接
js 的数值限制可能引起的问题
浅谈 js中parseInt函数的解析