js中的parseInt()方法总结

在w3School中定义

定义和用法
parseInt() 函数可解析一个字符串,并返回一个整数。
语法

parseInt(string, radix)
参数 描述
string 必需。要被解析的字符串。
radix 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

解析规则

  1. string头尾部空格将被自动除去
parseInt("    011      ",2)      //3
  1. string不是字符串,则将其转换为字符串再解析
parseInt(11,2)       //3
parseInt(011,2)      //NaN  011转换成string是9,而9对于二进制是非法字符
parseInt(011)        //9
parseInt(1.11,10)    //1
  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
  1. 两个参数都存在的情况下,以radix为基数解数数析string。如:
parseInt("011",2)      //3
parseInt("011",10)     //11
parseInt("011",16)     //17
  1. 如果字符串包含对于指定进制无意义的字符,则返回NaN
parseInt('1546', 2) // 1
parseInt('546', 2) // NaN
  1. 第二个参数radix省略时,默认为10进制解析,以0x开头时以16进制解析。以0开头时ES5规定按照10进制解析。如:
parseInt("11")         //11
parseInt("011")        //11,目前chrome、firefox、ie中的结果都是11,若想用8进制解析,请加上第二个参数!
parseInt("0x11")       //17
  1. 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进制解析,遇到非数字则停止
  1. string的第一个字符不能被转换成数字(后面跟着数字的正负号除外),结果返回NaN
parseInt("ww")         //NaN, 解析成parseInt("",10);
parseInt("0xww")       //NaN, 解析成parseInt("",16)
parseInt("+11")       //11
  1. 自动转为科学计数法的数字,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函数的解析

你可能感兴趣的:(js中的parseInt()方法总结)