【问题标题】:Why is 0700/100 equal to 4.48 and 0900/100 equal to 9 in JavaScript? [duplicate]为什么 JavaScript 中 0700/100 等于 4.48 而 0900/100 等于 9? [复制]
【发布时间】:2020-03-11 15:13:17
【问题描述】:
console.log(0700/100) // result: 4.48
console.log(0900/100) // result: 9

我通过创建一个计算器应用程序来学习 vue,并使用数组来存储变量。当我通过在实际操作数之前输入 0 来测试它时,我对上述行为感到困惑。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    因为0700 以零开头,所以 JS 将其视为八进制(以 8 为底)数。 0900 不能是八进制,所以 JS 将其视为常规十进制(base-10)数字。

    0700 octal = 448 decimal,所以0700 (octal) / 100 (decimal) = 4.48

    【讨论】:

    • 我想,真正的问题是为什么 0900 被解释为十进制而不是抛出关于八进制损坏的错误......
    • @ArturBiesiadowski 这个问题及其答案有一些有趣的背景和历史:stackoverflow.com/questions/37003770/…。短版本是使用严格模式,这会消失。
    • 我明白了,非常感谢先生。我能问一下为什么它将 0700 视为八进制只是因为它以 0 开头。再次感谢先生。
    • @ArturBiesiadowski 因为这是自 JavaScript 开始以来就指定的内容。现代功能不使用这种行为。
    • 我明白了,很奇怪,但非常感谢
    【解决方案2】:

    当你在数字前加上0时,js将它转换为八进制,等于448。但是0900包含9,所以它不能是八进制,所以它等于900。

    【讨论】:

    • 它不会将其“转换”为八进制,而是将其解析为八进制。
    猜你喜欢
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    相关资源
    最近更新 更多