为什么JavaScript中的032 * 2 = 52?

时间:2015-07-14 06:17:31

标签: javascript numbers

我很有兴趣了解032*2为什么在JavaScript中返回52

我觉得032可以作为octal notation进行互操作,但我找不到合适的参考资料。

你可以请:

  • 向我提供参考文献的解释。

先谢谢你的帮助。

3 个答案:

答案 0 :(得分:5)

0开始的

Numbers Octal 。所以,032 === 26

要将其转换为Base-10 / 十进制号,请使用{{3>} radix 10。

parseInt('032', 10) * 2; // 64

来自MDN文档:

  

如果radix未定义或0(或不存在),则JavaScript假定以下内容:

  1. 如果输入字符串以" 0x&#34开头;或" 0X",基数为16(十六进制),并解析字符串的其余部分。
  2. 如果输入字符串以" 0"开头,则基数为8(八进制)或10(十进制)。确切选择哪个基数取决于实现。 ECMAScript 5指定使用10(十进制),但并非所有浏览器都支持此功能。因此,在使用parseInt时始终指定基数。
  3. 如果输入字符串以任何其他值开头,则基数为10(十进制)。

答案 1 :(得分:2)

  

没有基数的八进制解释

     

尽管ECMAScript 3气馁并且ECMAScript 5禁止,   许多实现将以前导0开头的数字字符串解释为八进制。以下可能有八进制结果,或者可能有十进制结果。
  始终指定一个基数以避免这种不可靠的行为。

来源:https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/parseInt

答案 2 :(得分:2)

ECMAScript 5.1指定了对数字文字in its annex的一些扩展:

  

7.8.3 [数字文字]的语法和语义可以扩展如下,除了严格模式代码不允许使用此扩展名:

NumericLiteral ::
   DecimalLiteral
   HexIntegerLiteral
   OctalIntegerLiteral
OctalIntegerLiteral ::
   0 OctalDigit
   OctalIntegerLiteral OctalDigit

结论是,任何以0开头且后跟OctalDigit的数字都可以视为八进制数。但是,在严格模式下,这是