Javascript – 将数字转换为将数字转换为某个不同数字的数字。 不明白为什么会发生这种情况?

某个数字的前导零,将数字转换为某种未知数字格式。 例如 :

017正在转换为15

037正在转换为31

还发现最终具有8 0r 9的数字保持相同,例如:

01818

03838

o5959

我发现的另一件事是

对于每个下一个10的范围,转换值和实际值之间的差值增加2

例如 :

对于范围00-09差异为0即07的值为7,04为4

对于范围010-019差异是2值017将是010-019将是11

对于范围020-029差异是4值027将是020-029将是17

等等..

这是一个测试的snipet http://jsfiddle.net/rajubera/BxQHF/

我不知道为什么会这样?

请帮助我如何从前导零的数字中获取正确的十进制数?

如果有一个前导0,它将它转换为八进制(基数为8),只要它是基数为8的有效数字(没有大于7的数字)。

例如:

基数8中的017是1 * 8 + 7 = 15 037 ,基数8是3 * 8 + 7 = 31

018被转换为18因为018不是基数8中的有效数字

请注意,默认情况下,数字转换为哪个基数的行为可以是特定于浏览器的,因此在使用parseInt时始终指定基数/基数很重要:

parseInt("017",10) === 17

根据评论更新:

parseInt期望一个string作为第一个参数,所以

parseInt("012",10) === 12

"use strict";的原因之一"use strict";

 (function() {"use strict"; 017})() // Firefox => SyntaxError: "0"-prefixed octal literals and octal escape sequences are deprecated; for octal literals use the \"0o\" prefix instead // Chrome, Node => SyntaxError: Octal literals are not allowed in strict mode. 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Deprecated_octal