共计 1210 个字符,预计需要花费 4 分钟才能阅读完成。
说到 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。