大概80%的前端小伙伴都不懂ParseInt是这么用的

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

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

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

​ 第一个是需要被解析的字符串(如果参数不是一个字符串,则将其转换为字符串(使用 ToString 抽象操作)。字符串开头的空白符将会被忽略。)

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

下面我们来看几个例子:

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

前两个比较好理解,parseInt函数将第一个参数转成对应字符串,再按照第二个参数的进制进行输出。

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

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

我们打印一下:

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

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

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

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

所以,在处理非常大或非常小的数时,会有一些意想不到的情况发生。

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

搞两个简单的例子说明一下:

parseInt('0xF') // 15
parseInt('-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。

你可能感兴趣的:(大概80%的前端小伙伴都不懂ParseInt是这么用的)