如果我写这个脚本:
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 尝试解析字符串,直到找到非整数值,此时它返回它所拥有的任何值.
所以如果字符串是:
parseFloat除了不会破坏之外的相同.
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)
参考:
这就是假设工作的方式.它解析字符串,直到它达到非数字字符.
您可能有兴趣检查该函数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)
基于这些建议,我确信您可以构建自己的函数,忽略包含非数字字符的任何字符串.
| 归档时间: |
|
| 查看次数: |
6287 次 |
| 最近记录: |