parseInt()应该像这样工作吗?

时间:2012-02-24 10:25:51

标签: javascript

如果我写这个脚本:

alert(parseInt("123blahblahblah456"));

我收到值123

的提醒

理想情况下,函数不应该执行任何操作,因为它是一个无效的整数字符串吗? 类似于parseFloat()

的情况

7 个答案:

答案 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尝试解析字符串,直到找到一个非整数值,此时它会返回它所拥有的值。

所以如果字符串是:

  • 1234abcd - 返回1234
  • 1a3f - 它返回1
  • a14883 - 它返回NaN
  • 1.5 - 它返回1
  • -1.3a - 它返回-1

parseFloat相同,但不会在.

上中断
  • 1234abcd - 返回1234
  • 1a3f - 它返回1
  • a14883 - 它返回NaN
  • 1.5 - 它返回1.5
  • -1.3a - 返回-1.3

答案 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)

是的!就像在这里解释一样:http://www.w3schools.com/jsref/jsref_parseInt.asp

  

提示和注释

     

注意:只返回字符串中的第一个数字!

     

注意:允许前导和尾随空格。

     

注意:如果第一个字符无法转换为数字,   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