当前位置: 首页 > Web前端 > JavaScript

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

时间:2023-03-26 22:08:59 JavaScript

大概80%的前端朋友不明白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函数将第一个参数转换成对应的字符串,然后根据第二个参数输出的base进行处理。但为什么第三个输出整数8而不是0?看看第一个:如果参数不是字符串,则将其转换为字符串。打印出来吧:0.000008.toString()//'0.000008'0.0000008.toString()//'8e-7'可以看到一个小数转换成字符串后,就变成了e字符表示了~~当然,如果数字太大,也会使用e字符。这时候parseInt函数发现,哎,我不认识这个e字符,那怎么办呢?隔断!我转动'e'前面的那个就完成了,我不关心后面的那个。因此,在处理非常大或非常小的数字时,会出现一些意想不到的情况。我们要注意第二点,就是第二个参数的base默认值不是10,那么怎么计算呢?用两个简单的例子来说明:parseInt('0xF')//15parseInt('-0xA')//-10对比MDN上的解释,可以看得很清楚:1.parseInt可以理解两个符号。+表示正数,-表示负数(自ECMAScript1起)。它是在剥离空格后作为解析的初始步骤完成的。如果没有找到符号,则算法进入下一步;否则,它会删除符号并对字符串的其余部分执行数字解析。2.如果radix是undefined、0或unspecified,JavaScript会假设如下:3.如果输入字符串以“0x”或“0x”开头(一个0后跟一个小写或大写的X),那么radix就是Assuming16、字符串的其余部分被解析为十六进制数。4、如果输入字符串以“0”(0)开头,则基数假定为8(八进制)或10(十进制)。选择哪个基数取决于实现。ECMAScript5阐明了应该使用10(十进制),但并非所有浏览器都支持它。因此,在使用parseInt时,一定要指定一个基数。/4。如果输入字符串以任何其他值开头,则基数为10(十进制)。如果第一个字符无法转换为数字,则parseInt返回NaN。