为什么JavaScript输出16384而不是040000?

时间:2014-01-10 04:18:34

标签: javascript numbers

我的JavaScript程序遇到了一个非常奇怪的问题。我发现JavaScript由于某种原因将040000更改为16384! [Example]有谁知道为什么JavaScript会这样做?

2 个答案:

答案 0 :(得分:7)

这是因为在js中,0前面的数字文字被认为是八进制(基数为8)

例如

010 == 8

在您的示例中,040000确实是4*8*8*8*8 = 16384,因为在八进制中,右侧的每个0都会将该值乘以8。

编辑:奖金

如果前导0在字符串表示中(例如,如果它是由用户引入的),并且您希望避免转换为八进制,请指定基数(也称为 radix 10方法调用中的值parseInt,如此

var number = parseInt("040000", 10);  //number will be 40000 ;)

在最近的浏览器中,基数默认为10,但旧浏览器,因此如果您还想要最大兼容性,始终指定基数参数(通常为10) )。

干杯

答案 1 :(得分:3)

因为javascript认为它是OCTAL格式

<强>解释: -

Javascript(与大多数编程语言一样)允许我们直接使用octalhexadecimal数字,我们需要的是一种方法来告诉我们在使用哪个数字库时指定一个数字。为了识别octalhexadecimal数字,我们使用这些基数在数字前面添加一些内容,以指示我们使用的是哪个基数。数字前面的前导0表示后面的数字是八进制,而前导0x表示十六进制数字。因此,十进制数18也可以表示为022octal)和0x12hexadecimal中)。我们不在十进制数字的前面加上特殊符号,因此任何不以00x开头的数字都假定为十进制。

在你的情况下也一样

040000(base8)=16384(base10)