parseInt方法
parseInt方法可以将字符串或小数转化为整数。如果字符串头部有空格,空格会被自动去除。
parseInt("123") // 123 parseInt(1.23) // 1 parseInt(' 81') // 81
如果字符串包含不能转化为数字的字符,则不再进行转化,返回已经转好的部分。
parseInt("8a") // 8 parseInt("12**") // 12 parseInt("12.34") // 12
如果字符串的第一个字符不能转化为数字(正负号除外),返回NaN。
parseInt("abc") // NaN parseInt(".3") // NaN parseInt("") // NaN
parseInt方法还可以接受第二个参数(2到36之间),表示被解析的值的进制。
parseInt(1000, 2) // 8 parseInt(1000, 6) // 216 parseInt(1000, 8) // 512
这意味着,可以用parseInt方法进行进制的转换。
parseInt("1011", 2) // 11
需要注意的是,如果第一个参数是数值,则会将这个数值先转为10进制,然后再应用第二个参数。
parseInt(010, 10) // 8 parseInt(010, 8) // NaN parseInt(020, 10) // 16 parseInt(020, 8) // 14
上面代码中,010会被先转为十进制8,然后再应用第二个参数,由于八进制中没有8这个数字,所以parseInt(010, 8)会返回NaN。同理,020会被先转为十进制16,然后再应用第二个参数。
如果第一个参数是字符串,则不会将其先转为十进制。
parseInt("010") // 10 parseInt("010",10) // 10 parseInt("010",8) // 8
可以看到,parseInt的很多复杂行为,都是由八进制的前缀0引发的。因此,ECMAScript 5不再允许parseInt将带有前缀0的数字,视为八进制数。但是,为了保证兼容性,大部分浏览器并没有部署这一条规定。
另外,对于那些会自动转为科学计数法的数字,parseInt会出现一些奇怪的错误。
parseInt(1000000000000000000000.5, 10) // 1 // 等同于 parseInt('1e+21', 10) // 1 parseInt(0.0000008, 10) // 8 // 等同于 parseInt('8e-7', 10) // 8