如果我写这个脚本:
alert(parseInt("123blahblahblah456"));
我收到值123
理想情况下,函数不应该执行任何操作,因为它是一个无效的整数字符串吗?
类似于parseFloat()
答案 0 :(得分:11)
是的,比较所有的答案。我想补充一点,这就是检查某个值是否可以转换为数字的原因,最好使用Number
。
Number("123blahblahblah456"); //=> NaN
Number("123"); //=> 123
// if the conversion result needs to be an int
Math.round(Number("123.4567")); //=> 123
答案 1 :(得分:10)
parseInt
尝试解析字符串,直到找到一个非整数值,此时它会返回它所拥有的值。
所以如果字符串是:
与parseFloat
相同,但不会在.
答案 2 :(得分:10)
是的:parseInt()
绝对意味着像那样工作;引用Mozilla Developer Network条目:
parseInt函数将其第一个参数转换为字符串,对其进行解析,并返回一个整数或NaN。如果不是NaN,则返回的值将是作为指定基数(基数)中的数字的第一个参数的十进制整数表示。例如,10的基数表示从十进制数转换,8八进制,十六进制16,依此类推。对于大于10的基数,字母表中的字母表示大于9的数字。例如,对于十六进制数字(基数16),使用A到F.
如果parseInt遇到的字符不是指定基数中的数字,它会忽略它和所有后续字符,并返回解析到该点的整数值。 parseInt将数字截断为整数值。允许前导和尾随空格。
似乎parseInt()
明确期望接受一个字符串并将采用第一个数字序列(直到遇到无效的数字字符)并将其作为radix参数中指定的任何基数返回
顺便说一句,要在解析传递给parseInt()
的字符串时减少错误,请记住使用radix参数,例如:
parseInt('123odod24',10); // for base-10
parseInt('123odod24',16); // for base-16
参考:
答案 3 :(得分:5)
这就是假设工作的方式。它解析字符串,直到它达到非数字字符。
您可能有兴趣查看函数isFinite()
,它会检查字符串是否为有限的合法数字:
isFinite("123"); // true
isFinite("123a");// false
但是对于空字符串和空格,这将返回true。因此,您可以通过编写
来改进此解决方案mystring = "123";
mystringb = " ";
!isNaN(parseInt(mystring)) && isFinite(mystring); // true
!isNaN(parseInt(mystringb)) && isFinite(mystringb); // false
根据这些建议,我确信你可以构建自己的函数,忽略任何包含非数字字符的字符串。
答案 4 :(得分:2)
据我所知,parseInt()
方法试图解析,直到找到一个字符。所以,如果你有
parseInt("123 Iam funny")
它将返回123。parseInt("whats up 4711")
它将返回NaN 您可能要查看的一些文档:
答案 5 :(得分:2)
这是documented to behave like that:
如果
parseInt
遇到的字符不是数字 指定的基数,它忽略它和所有后续字符和 返回解析到该点的整数值。
这种行为是否是一个好主意是另一回事,但现在改变它已经太迟了。
答案 6 :(得分:-1)
提示和注释
注意:只返回字符串中的第一个数字!
注意:允许前导和尾随空格。
注意:如果第一个字符无法转换为数字, parseInt()返回NaN。
实施例
解析不同的字符串:
<script type="text/javascript">
document.write(parseInt("10") + "<br />");
document.write(parseInt("10.33") + "<br />");
document.write(parseInt("34 45 66") + "<br />");
document.write(parseInt(" 60 ") + "<br />");
document.write(parseInt("40 years") + "<br />");
document.write(parseInt("He was 40") + "<br />");
document.write("<br />");
document.write(parseInt("10",10)+ "<br />");
document.write(parseInt("010")+ "<br />");
document.write(parseInt("10",8)+ "<br />");
document.write(parseInt("0x10")+ "<br />");
document.write(parseInt("10",16)+ "<br />");
</script>
上面代码的输出将是:
10
10
34
60
40
NaN
10
8
8
16
16