Javascript 带有前导零的数学错误

Javascript math error with leading zeroes

我是一名编写简单 HTML/Javascript 程序的业余程序员,我最近 运行 遇到了一些我无法解释的事情。我有一个小程序可以设置约会的开始和结束时间。两者的格式都是 HHMMSS。我硬编码了我需要的开始时间,例如103000或123000,然后写了一行代码加上10000得到结束时间。在我尝试 073000 + 10000 之前,它工作正常。结果不是 083000(或至少 83000),而是 40208。

我会把问题记为前导 0 的问题,但是 093000 + 10000 = 103000,这是我所期望的。 073000 + 10000 = 40208 是怎么回事?

我用不同的方式修复了程序,但我被这个难住了。非常感谢您提供的任何解释。

这是 w3schools 的一些简单代码,生成 40208 作为相加结果:

<!DOCTYPE html>
<html>
<body>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

<script>
function myFunction() {
    var x = 073000 + 10000;
    document.getElementById("demo").innerHTML = x;
}
</script>

</body>
</html>

带前导 0 的数字是八进制数,与带前导 0x 的数字是十六进制数相同:

01 = 1
02 = 2
...
07 = 7
010 = 8
011 = 9

通常 09 会导致语法错误,因为 9 不是八进制数字(与 e 不是十进制数字的方式相同)。但显然现在大多数浏览器都会自动将其检测为十进制而不是引发错误。


注意:在严格模式下使用八进制语法(以 0 开头的数字会导致语法错误,因为八进制语法不是 ECMAscript 标准的一部分。