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

Vru*_*ank 7 javascript

如果我写这个脚本:

alert(parseInt("123blahblahblah456"));

我得到了值的警报 123

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

Koo*_*Inc 13

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

Number("123blahblahblah456"); //=> NaN
Number("123"); //=> 123
+"97.221" //=> 97.221
// if the conversion result needs to be an int
Math.round(Number("123.4567")); //=> 123
Run Code Online (Sandbox Code Playgroud)


Joe*_*Joe 11

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


Dav*_*mas 11

是的: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
Run Code Online (Sandbox Code Playgroud)

参考:

  • 这很愚蠢,我知道它可能有一些有用的应用程序,但如果它可以检查整个字符串并在遇到任何 NaN 时返回 false,那么它会更有用。需要澄清的是,我称 Brendan Eich 做出这个决定是愚蠢的,而不是你:) (4认同)

MMM*_*MMM 5

这就是假设工作的方式.它解析字符串,直到它达到非数字字符.

您可能有兴趣检查该函数isFinite(),它检查字符串是否是有限的合法数字:

isFinite("123"); // true
isFinite("123a");// false
Run Code Online (Sandbox Code Playgroud)

但是,对于空字符串和空格,这将返回true.因此,您可以通过编写来改进此解决方案

mystring = "123";
mystringb = " ";
!isNaN(parseInt(mystring)) && isFinite(mystring); // true
!isNaN(parseInt(mystringb)) && isFinite(mystringb); // false
Run Code Online (Sandbox Code Playgroud)

基于这些建议,我确信您可以构建自己的函数,忽略包含非数字字符的任何字符串.