说到JavaScript中的parseInt函数,不少同学可能感觉这个函数比较简单,就是一个把字符串转成整数的办法,第一工夫想到的例子是这样的:

parseInt('1') // 1parseInt('0.1') // 0parseInt('8.8') // 8

熟不知,parseInt函数可传入两个参数:

第一个是须要被解析的字符串(如果参数不是一个字符串,则将其转换为字符串(应用 ToString 形象操作)。字符串结尾的空白符将会被疏忽。)

第二个示意要解析的数字的基数。(从 2 到 36,示意字符串的基数。例如指定 16 示意被解析值是十六进制数。请留神,10不是默认值!)

上面咱们来看几个例子:

parseInt('11',2) // 3parseInt("1f",16) // 31parseInt(0.000000008) // 8

前两个比拟好了解,parseInt函数将第一个参数转成对应字符串,再依照第二个参数的进制进行输入。

然而第三个为什么会输入一个整数8而不是0呢?

且看第一条:如果一个参数不是字符串,则将其转换为字符串。

咱们打印一下:

0.000008.toString() // '0.000008'0.0000008.toString() // '8e-7'

能够看到,将一个很小的数转成字符串之后,就成了用e字符进行示意了~~

当然,如果一个数太大的话,也会应用到e字符。

这个时候,parseInt函数发现,哎,这个e字符我不意识啊,那怎么办呢?截断!’e’后面的我转一下完事了,前面的不论啦就。

所以,在解决十分大或十分小的数时,会有一些意想不到的状况产生。

再来关注一下第二点,即第二个参数的基数默认值并不是10。那我怎么计算呢?

搞两个简略的例子阐明一下:

parseInt('0xF') // 15parseInt('-0xA') // -10

对照MDN上的解释,能够看得明明白白:

1、parseInt 能够了解两个符号。+ 示意负数,- 示意正数(从ECMAScript 1开始)。它是在去掉空格后作为解析的初始步骤进行的。如果没有找到符号,算法将进入下一步;否则,它将删除符号,并对字符串的其余部分进行数字解析。

2、如果 radix 是 undefined、0或未指定的,JavaScript会假设以下状况:

3、如果输出的 string以 “0x“或 “0x“(一个0,前面是小写或大写的X)结尾,那么radix被假设为16,字符串的其余部分被当做十六进制数去解析。
4、如果输出的 string以 “0“(0)结尾, radix被假设为8(八进制)或10(十进制)。具体抉择哪一个radix取决于实现。ECMAScript 5 廓清了应该应用 10 (十进制),但不是所有的浏览器都反对。因而,在应用 parseInt 时,肯定要指定一个 radix。/4、如果输出的 string 以任何其余值结尾, radix 是 10 (十进制)。
如果第一个字符不能转换为数字,parseInt会返回 NaN。