为什么Javascript parseInt(' 0x4Avv')返回与 parseInt相同(' 0x4A') 我指望 parseInt(' 0x4Avv')返回 NaN 。
有没有让它表现得如此?
即使是奇怪的字符串'工作',例如: parseInt(' 0x4Av - 9-0-90v')会产生与相同的结果parseInt函数(' 0x4A&#39)
在所有浏览器中观察....
答案 0 :(得分:6)
以下是MDN parseInt文档的摘录
如果parseInt遇到的字符不是数字 指定的基数,它忽略它和所有后续字符和 返回解析到该点的整数值。 parseInt截断 数字到整数值。允许前导和尾随空格。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt
没有一种内置的方法可以使其表现不同,但你可以想象使用可能更严格的正则表达式来编写自己的int解析函数。
答案 1 :(得分:4)
parseInt()
函数并不关心源字符串中的尾随垃圾。 parseFloat()
函数共享该行为。
如果要将字符串转换为数字,并且确保字符串为"所有数字",则可以使用+
一元运算符:
var num = +someString;
它为您提供了一个JavaScript编号,因此如果您想要一个整数,您可以改为使用其中一个:
var intval = ~~someString;
var intval = someString|0;
将示例中的错误字符串提供给任何这些技术都会让您NaN
。
答案 2 :(得分:3)
parseInt
会在无效号码后忽略所有内容。
这里是一个小例子。
parseInt("12ab") // radix asumed to 10 since there isn't specified.
// 1 -> valid number
// 2 -> valid number
// a -> not valid number, DROP everything after this including this..
//
// so it endup behaving like:
parseInt("12") // 12
答案 3 :(得分:1)
如前面的答案中所述,parseInt
和parseFloat
都会将所有输入转换为字符串,然后尝试将所有数值解析为第一个非数值(请参阅{{3}进一步阅读)。但是,如果您尝试将字符串强制转换为数字并希望它返回NaN
值,如果整个字符串不表示数字,则可以使用MDN documentation全局对象来执行此操作:< / p>
> Number('0x4Avv')
NaN
> Number('0x4A')
74
> Number('0x4Av--9-0-90v')
NaN