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

为什么在JavaScript中032*2=52?,javascript,numbers,Javascript,Numbers,我很有兴趣理解为什么032*2在JavaScript中返回52 我有一种感觉,032可以作为octalnotation相互渗透,但我找不到适当的参考 请你: 请给我一个带参考资料的解释 提前感谢您在这方面的帮助。从0开始是八进制的。所以,032==26 要将其转换为基数10/十进制数,请使用基数10 来自MDN文档: 如果基数未定义或为0(或不存在),JavaScript将假定: 如果输入字符串以“0x”或“0x”开头,则基数为16(十六进制),并解析字符串的其余部分 如果输入字符串以“0”

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

我有一种感觉,
032
可以作为
octalnotation
相互渗透,但我找不到适当的参考

请你:

  • 请给我一个带参考资料的解释
提前感谢您在这方面的帮助。

0开始是八进制的。所以,
032==26

要将其转换为基数10/十进制数,请使用基数10

来自MDN文档:

如果基数未定义或为0(或不存在),JavaScript将假定:

  • 如果输入字符串以“0x”或“0x”开头,则基数为16(十六进制),并解析字符串的其余部分
  • 如果输入字符串以“0”开头,则基数为8(八进制)或10(十进制)。选择哪个基数取决于具体实现。ECMAScript 5指定使用10(十进制),但并非所有浏览器都支持这一点。因此,在使用parseInt时,请始终指定基数
  • 如果输入字符串以任何其他值开头,则基数为10(十进制)
  • 不带基数的八进制解释

    虽然ECMAScript 3不鼓励,ECMAScript 5禁止, 许多实现将以前导0开头的数字字符串解释为八进制。以下可能是八进制结果,也可能是十进制结果。
    始终指定基数以避免这种不可靠的行为


    来源:

    ECMAScript 5.1指定了数字文本的一些扩展:

    7.8.3[数值文字]的语法和语义可扩展如下,但严格模式代码不允许此扩展:

    NumericLiteral :: DecimalLiteral HexIntegerLiteral OctalIntegerLiteral OctalIntegerLiteral :: 0 OctalDigit OctalIntegerLiteral OctalDigit 数字文字:: 分米线 六积分法 八边 八边: 0八达吉特 八面平行八面体
    由此得出结论,任何以
    0
    开头,后跟
    OctalDigit
    s的数字都可以被视为八进制数。但是,这在严格模式下是不允许的。

    哦,这很有趣。我不知道ES5禁止它。。我想每天都要学些新东西。RE:你感觉你在谷歌上搜索过八进制javascript吗?我的前三名结果都解释了这一点,MDN就是其中之一。感谢您发布相关问题/答案,但我相信我的问题不会重复。。。除解释外,我还需要链接/参考一些文档。032=(3*(8^1)+2*(8^0))=((3*8)+2*1)=(24+2)=26。因此,032*2=52要求我们推荐非现场资源的问题也与主题无关。@MartinSmith感谢您的评论,我不知道有关链接到外部资源的规则。 NumericLiteral :: DecimalLiteral HexIntegerLiteral OctalIntegerLiteral OctalIntegerLiteral :: 0 OctalDigit OctalIntegerLiteral OctalDigit