2014-01-10 34 views
3

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

+0

如果你真的需要有一些填充前用零,请尝试使用字符串。 –

回答

3

,因为JavaScript认为它在OCTAL格式

说明: -

Javascript(最喜欢的编程语言)允许我们直接与两个octalhexadecimal号工作,所有我们当我们指定一个数字时,需要用一种方法来告诉我们使用的是什么数字。为了识别octalhexadecimal数字,我们在数字的前面添加了一些东西,用这些基数来表示我们正在使用哪个基数。数字前面的前导0表示后面的数字是八进制数,而前导0x表示十六进制数。十进制数18因此也可以表示为022(在octal)和0x12(在hexadecimal中)。我们不在十进制数字的前面放置特殊符号,因此任何不以00x开头的数字都被假定为十进制数字。

因此,它在你的情况一样

040000(base8)=16384(base10) 
7

这是因为在JS,与0前缀数字文字被视为(基数8)

例如

010 == 8 

在您的例子040000真的4*8*8*8*8 = 16384因为八在每个0右乘以8的值。

编辑:奖金

如果前导0是在一个字符串表示,(例如,如果它是由用户引入),并且要避免转换为八进制数,与值10在指定基(又名基数)该parseInt方法调用,这样

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

在最新的浏览器,基数默认为10,但不是在旧的浏览器,所以如果你想最大的兼容性也始终指定基数参数(通常10)。

干杯

+0

这是一个可视化八进制的好方法。谢谢。 – Scopey

+0

为什么八进制? 'base4'或'base2(二进制)'不会更现实吗?有什么办法可以避免这种情况吗? – Progo

+0

@Progo:为什么你首先要有一个领先的'0'?它来自用户输入还是来自服务器端变量? –

相关问题