为什么Javascript parseInt(' 0x4A')返回与parseInt相同(' 0x4Avv')?

时间:2015-04-21 19:52:58

标签: javascript

为什么Javascript parseInt(' 0x4Avv')返回与 parseInt相同(' 0x4A') 我指望 parseInt(' 0x4Avv')返回 NaN

有没有让它表现得如此?

即使是奇怪的字符串'工作',例如: parseInt(' 0x4Av - 9-0-90v')会产生与相同的结果parseInt函数(' 0x4A&#39)

在所有浏览器中观察....

4 个答案:

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

如前面的答案中所述,parseIntparseFloat都会将所有输入转换为字符串,然后尝试将所有数值解析为第一个非数值(请参阅{{3}进一步阅读)。但是,如果您尝试将字符串强制转换为数字并希望它返回NaN值,如果整个字符串不表示数字,则可以使用MDN documentation全局对象来执行此操作:< / p>

> Number('0x4Avv')
NaN
> Number('0x4A')
74
> Number('0x4Av--9-0-90v')
NaN