带有前导零的Javascript数学错误

时间:2015-01-21 02:56:13

标签: javascript addition

我是一名业余程序员,编写简单的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>

1 个答案:

答案 0 :(得分:3)

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

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

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


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