http://www.51as.com/js/parseInt.html
parseInt 与 parseFloat 是把字符串转换成整数和浮点数,但他们只检查字符串的前缀,也就是说字符串后部含有非数字字符也是可以转换的。语法为:
下表列出了 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 这一项,结果比较出乎人意料。
可以看出
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 了。