深度了解 parseInt 与 parseFloat

作者:vkvi 来源:ITPOW(原创) 日期:2009-7-6

parseInt 与 parseFloat 是把字符串转换成整数和浮点数,但他们只检查字符串的前缀,也就是说字符串后部含有非数字字符也是可以转换的。语法为:

parseFloat(numString)

下表列出了 numString 为不同值时的情况,具有参考价值:

numString parseInt(numString) parseFloat(numString)
零长度字符串 NaN NaN
null NaN NaN
undefined NaN NaN
.3 NaN 0.3
-.3 NaN -0.3
-3 -3 -3
3e7 3 30000000
0xFF 255 0
0x3e7 999 0
08 0 8
3 3 3
123abc 123 123

上述中,numString 中的字母大小写结果相同(null 和 undefined 不算)。

NaN 表示不是一个数字(Not a Number),要特别注意 3e7 和 09 这一项,结果比较出乎人意料。

可以看出

  • parseInt 认识十六进制和八进制,但不认识科学计数法。
  • parseFloat 认识科学计数法,但不认识十六进制和八进制。

3e7 为科学计数法,parseInt 不认识,所以只取了前缀 3,而 parseFloat 则跟了 7 个零。有人说会不会是 3e7 溢出了所以 parseInt 认不到呢?不是的,因为 parseInt("3e1") 仍然是 3,而不是 30。

0xFF 为十六进制,parseInt 认识,但 parseFloat 不认识。

0x3e7 也是十六进制,这里 3e7 不是科学计数法,e 是十六进制中的一个符号。

08 是以 0 开头,在 parseInt 中被当作八进制,八进制里面没有 8 这个数字,所以 parseInt("08")(注意引号括起来的)结果就是 0 了,相应地 parseInt("010") 结果就是 8 了。

相关阅读

相关文章