可能重复:
为什么 parseInt() 会这样工作?
我遇到了 parseInt() 意外返回 0 的问题,这是一个示例:
parseInt('-06') = -6
parseInt('-07') = -7
parseInt('-08') = 0
为什么结果为 0?如果我继续下降(-09、-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”不是有效的以 8 为基数的数字,因此解析失败,并返回 0。
来自MDN
基数
一个整数,表示上述字符串的基数。虽然此参数是可选的,但始终指定它以消除读者混淆并保证可预测的行为。当未指定基数时,不同的实现会产生不同的结果。
另请注意,您可以使用一元运算+
符将这些字符串转换为数字:
var str = '-08';
var num = +str;
console.log(num);
//logs -8
你也可以试试这个:
'-06' * 1 = -6
'-07' * 1 = -7
'-08' * 1 = -8