Javascript JS parseInt()返回0

Javascript JS parseInt()返回0,javascript,Javascript,可能重复: parseInt()意外返回0时出现问题,下面是一个示例: parseInt('-06') = -6 parseInt('-07') = -7 parseInt('-08') = 0 为什么结果是0?如果我继续下跌(-09,-10等),也是一样的。字符串的格式来自我的框架,所以我需要处理它。谢谢 使用parseInt parseInt('-08', 10); 如果没有,并且正在解析的字符串的前导为零,parseInt会根据浏览器的不同生成不同的结果。最常见的问题是字符串将被视为

可能重复:

parseInt()意外返回0时出现问题,下面是一个示例:

parseInt('-06') = -6
parseInt('-07') = -7
parseInt('-08') = 0

为什么结果是0?如果我继续下跌(-09,-10等),也是一样的。字符串的格式来自我的框架,所以我需要处理它。谢谢

使用
parseInt

parseInt('-08', 10);
如果没有,并且正在解析的字符串的前导为零,
parseInt
会根据浏览器的不同生成不同的结果。最常见的问题是字符串将被视为基数为8的数字,这就是您看到的

这就是为什么这对'-06'和'-07'有效的原因,它们都是有效的基数8。由于'-08'不是有效的base-8数字,因此分析失败,返回0

基数

一个整数,表示上述函数的基数 一串虽然此参数是可选的,但始终将其指定为 消除读者困惑,确保行为可预测。 使用基数时,不同的实现会产生不同的结果 未指定


还请注意,您可以使用一元
+
运算符将这些字符串转换为数字:

​var str = '-08';
var num = +str;

console.log(num);​​​

//logs -8

您也可以尝试以下方法:

'-06' * 1 = -6
'-07' * 1 = -7
'-08' * 1 = -8

这是firefox中的一个bug,请改用
parseFloat
。获取有关此bug的更多详细信息


检查
parseFloat
结果。

这种行为发生在哪个浏览器中?对我来说,在Chrome中工作得很好。啊,这在IE中发生只是为了参考。@MatthewCox和Fire Fox,正如你运行这个提琴所看到的:“parseInt假设你正在解析的数字是基数8。”-更糟糕的是,这种行为在不同浏览器中并不一致。@nnn-事实上-MDN链接也说了同样的话。我不知道这是未定义的行为,我只是放了一个fiddle()来测试一下。我的家用电脑上没有IE,但在FireFox中字符串被视为基数8,在Chrome中被视为基数10。@AmericanUmlaut-ha-我自己刚刚测试过这个。我不知道是Chrome干的。另一个喜欢Chrome的原因,我想谢谢你的详细回复!你太棒了!这本身并不是一个真正的bug——语言规范改变了
parseInt()
在没有指定基数的情况下的工作方式,因此仍然使用旧方法的浏览器不会太疯狂。请注意,如果输入可能类似于
“123.45”
,则不能仅替换
parseFloat()
而得到相同的结果。