2012-02-24 55 views
4

如果我写这个剧本:parseInt()是否应该像这样工作?

alert(parseInt("123blahblahblah456"));

我得到的警报,该值123

理想的情况下,不应该的功能不做任何事情,因为它是一个无效的整数字符串? 类似的情况是parseFloat()

+2

方便的谷歌搜索提示:一个JavaScript函数的名称后输入“MDN”,例如,“parseInt函数MDN”,以及第一个搜索结果是几乎总是在Mozilla开发者网络的适当DOCO页面。 – nnnnnn 2012-02-24 10:43:02

+1

当你解析CSS属性时,这种行为变得很方便,因为有时它们包含一个单元:'parseInt(“120px”,10)' - >'120' – Ignitor 2012-09-08 16:43:03

回答

9

是的:parseInt()绝对是这样工作的;引用Mozilla开发者网络条目:

的parseInt函数功能第一个参数转换为字符串,分析它,并返回一个整数或NaN。如果不是NaN,则返回的值将是第一个参数的十进制整数表示形式,该形式以指定基数(base)中的数字形式表示。例如,基数为10表示从十进制数,8个八进制数,16个十六进制数等转换而来。对于10以上的基数,字母表中的字母表示数字大于9.例如,对于十六进制数字(基数为16),使用A到F.

如果parseInt遇到不是指定基数中的数字的字符,它会忽略它和所有后续字符,并返回解析到该点的整数值。 parseInt将数字截断为整数值。前后空格是允许的。

似乎parseInt()明确希望获得一个字符串,并会采取数的第一序列(直到遇到一个无效的数字字符)并返回多项任何基地是在基数参数中指定的。

parseInt('123odod24',10); // for base-10 
parseInt('123odod24',16); // for base-16 

参考:

  • parseInt() at the MDC

    顺便说一句,解析传递给parseInt()的字符串时记得使用基数参数,例如,以减少错误。

10

parseInt试图解析字符串,直到它找到一个非整数值,此时它返回它所有的值。

因此,如果字符串是:

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

parseFloat相同除了t帽子不会在.

  • 1234ABCD突破 - 它返回1234
  • 1a3f - 它返回1
  • a14883 - 它返回NaN
  • 1.5 - 它返回1.5
  • -1.3a - 它返回-1.3
-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 
2

这是documented to behave like that

如果parseInt遇到一个字符是不是在 指定基数的数字,却忽视了它,所有随后的字符和 返回解析到这一点整数值。

这种行为是否是一个好主意是另一回事,但现在改变它已经太迟了。

3

这是它是如何工作的。它解析字符串直到达到非数字字符。

您可能感兴趣的检查出功能isFinite(),它会检查羯羊一个字符串是有限的,合法的数字:

isFinite("123"); // true 
isFinite("123a");// false 

但是这会为空字符串和空白返回true。因此,您可以通过编写

mystring = "123"; 
mystringb = " "; 
!isNaN(parseInt(mystring)) && isFinite(mystring); // true 
!isNaN(parseInt(mystringb)) && isFinite(mystringb); // false 

根据这些建议,我敢肯定,你可以建立自己的功能,将忽略包含非数字字符的任意字符串改善这种解决方案。

10

是的,比较所有的肛门。我想补充一点,这就是为什么检查某个值是否可以转换为数字,最好使用Number

Number("123blahblahblah456"); //=> NaN 
Number("123"); //=> 123 
// if the conversion result needs to be an int 
Math.round(Number("123.4567")); //=> 123 
+0

不错的提示..不知道数字部分...谢谢(你的)信息.. – Vrushank 2012-02-24 14:58:39

相关问题