【发布时间】:2011-09-18 14:17:34
【问题描述】:
【问题讨论】:
-
@Sorrow:除了它是用于 Java,而不是 Javascript。
标签: javascript parsing
【问题讨论】:
标签: javascript parsing
使用基数:
var x = parseInt("08", 10);
一些 JavaScript 实现为标准定义的两个数字系统添加了第三个数字系统(十进制,默认值;和十六进制,前缀为 0x):八进制,前缀为 0。这是非标准,但在latest spec 中被认为是常见的。
由于8 不是有效的八进制数字,parseInt 停在那里,返回值0。
通过显式使用基数,您告诉parseInt 不要试图找出正在使用的数字系统,而是使用您指定的数字系统。您在输入parseInt 时的直觉应该总是指定基数;不这样做会让你对怪事持开放态度。
【讨论】:
“08”表示基于 8 的数字。您应该指定第二个参数。
parseInt("08", 10)
【讨论】:
@T.J. gave a great explanation for the behaviour you see。解析数字字符串的另一种方法是使用一元+:
var num = +"08";
【讨论】:
来自http://www.bennadel.com/blog/2012-Exploring-Javascript-s-parseInt-And-parseFloat-Functions.htm:
以“0”开头的字符串被假定为base8(八进制)。
【讨论】:
来自 MDC - parseInt:
如果输入字符串以“0”开头,则基数为八(八进制)。这个特性是非标准的,一些实现故意不支持它(而是使用基数 10)。因此,在使用 parseInt 时始终指定一个基数。
还有例子:
parseInt("08"); // 0, '8' 不是八进制数。
也就是说,由于没有传入基数并且字符串以0 开头,因此假定为八进制。由于8 不是八进制数字,因此无法解析。
解决方案?始终提供 radix 参数:
parseInt("08", 10);
【讨论】:
如果你通过 jslint 运行它,它会因为不包含 radix 参数而对你大喊大叫。是的,基数是可选的,但可能每次都应该包括在内。除非另有说明,否则以 0 开头的数字假定为八进制。
var foo = parseInt("08", 10);
【讨论】:
以“0”为前缀的数字是八进制数。 8 是无效的八进制数。所以结果是 0
【讨论】: